我有一个简单的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 :(得分:2)
您需要在集合和/或模型的构造函数中调用super()
(如果已定义任何内容)。几天前我遇到了同样的问题:忽略调用super()
无法将_onModelEvent
对象绑定到集合,导致在不正确的上下文中调用它(this
指向到模型而不是集合[反之亦然]。)
答案 1 :(得分:0)
您需要将保存功能绑定到视图。
您可以通过在视图的初始化方法
中调用_.bindAll
来执行此操作
class Avia.StudentView extends Backbone.View
initialize: =>
_.bindAll(@, 'save');