保存Backbone.js模型时堆栈溢出

时间:2011-12-17 04:46:06

标签: backbone.js coffeescript

我有一个简单的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

有人可以告诉我我做错了什么吗?我不明白为什么会这样......

2 个答案:

答案 0 :(得分:2)

您需要在集合和/或模型的构造函数中调用super()(如果已定义任何内容)。几天前我遇到了同样的问题:忽略调用super()无法将_onModelEvent对象绑定到集合,导致在不正确的上下文中调用它(this指向到模型而不是集合[反之亦然]。)

答案 1 :(得分:0)

您需要将保存功能绑定到视图。

您可以通过在视图的初始化方法

中调用_.bindAll来执行此操作
class Avia.StudentView extends Backbone.View

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