2011-12-17 39 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');