2011-12-17 13 views
2

を節約しながら、私はシンプルなBACKBONE.JSモデルを持っている:スタックオーバーフローBACKBONE.JSモデル

class Avia.Student extends Backbone.Model 

は、明確にするために切り取ら(とにかく:-)、私は次のビューでそれを保存しています簡単だったことを言いました):

class Avia.StudentView extends Backbone.View 

    render: => 
    html = JST['views/student_view_template'](model: @model) 
    @el.html(html) 
    Backbone.ModelBinding.bind(@) 
    $('#save').bind('click', @save) 

    save: (e) => 
    e.preventDefault() 
    @model.save(
     success: =>, 
     error: => 
    ) 

私は保存ボタン、@saveを(クリック)と呼ばれるが、(再び、当然のようにわかりやすくするために切り取らそれが長時間続く)次のエラーで失敗している:

Uncaught RangeError: Maximum call stack size exceeded 
Backbone.Events.trigger:117 
_.extend._onModelEvent:635 
Backbone.Events.trigger:117 
_.extend._onModelEvent:635 
Backbone.Events.trigger:117 
_.extend._onModelEvent:635 
Backbone.Events.trigger:117 

誰かが私が間違っていることを教えてもらえますか?なぜこれが起こっているのかわかりません...

+0

いやに_.bindAllを呼び出すことにより、Backbone.ModelBinding.bind(@)行をコメントアウトしてみてくださいと – Paul

+0

を何が起こるか見て ''内の要素save'#です@エル '?本気ですか*?なぜなら、別の場所にあれば、各レンダリングで別の* clickイベントがバインドされるからです... –

+0

ありがとうございます - 私は 'Backbone.ModelBinding.bind(@)'をコメントアウトし、 '#save'を保証しましたそれを '#wooble'に名前を変更し、関連するバインディングの名前を変更することで一意です。私はまだ同じ問題に遭遇しています: -/ –

答えて

2

あなたのコレクションやモデルのコンストラクタ(定義済みの場合)にsuper()を呼び出す必要があります。私は数日前に同じ問題を抱えていました。super()を省略すると、_onModelEventオブジェクトがコレクションにバインドされず、不正なコンテキストで呼び出されます(thisはコレクションではなくモデルを指しています) )。

0

保存機能をビューにバインドする必要があります。

あなたがこれを行うビューのinitializeメソッド

class Avia.StudentView extends Backbone.View 

    initialize: => 
    _.bindAll(@, 'save'); 
関連する問題