我有一个骨干模型,我在其中更改了set方法,以计算每组模型的额外属性。
根据文档,这应该是调用super的方式,以确保模型实际保存。
Backbone.Model.prototype.set.call(this, attributes, options);
除非我使用Collection.create,否则它的工作方式与预期一致。
我的自定义set方法已运行,但我认为原始版本没有,因为该集合仍为空。 服务器接收正确的数据并发回正确的数据。在两种情况下我的方法都会被执行,但是这个集合仍然是空的。
我可以更改超级调用以使其与Collection.create一起使用,还是有其他方法可以执行相同的操作?
答案 0 :(得分:14)
正如我想的那样,我错过了一些东西。
重写Model.set()时必须将return this;
放在最后。
所以模型看起来应该是这样的:
var MyModel = Backbone.Model.extend({
set: function(attributes, options) {
// Custom code...
return Backbone.Model.prototype.set.call(this, attributes, options);
}
});
答案 1 :(得分:1)
我建议破解打开一个调试器并跟进它。查看Collection.create函数和Model.save函数。请注意,create
函数使用Model.save
回调调用success
。 Model.save
将数据发送到服务器,并链接到调用success
的{{1}}回调。
我会在Model.set
回调中为这两个函数添加断点,因为它们非常直接,可能会指出您的问题。
最后,如果您能够使用jsFiddle重现问题,那么帮助我们了解问题的完整背景将非常有用。