2011-12-17 48 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 2011-12-17 12:51:59

回答

2

您需要在集合和/或模型的構造函數中調用super()(如果您已定義任何)。前兩天我也遇到了同樣的問題:省略了調用super()未能將_onModelEvent對象綁定到集合,導致它在不正確的上下文中調用(this指向模型而不是集合[反之亦然] )。

0

您需要將保存功能綁定到視圖。

您可以通過在視圖的初始化方法

class Avia.StudentView extends Backbone.View 

    initialize: => 
    _.bindAll(@, 'save');