Backbone.js Collection.create和重写Model.set

时间:2011-09-30 08:38:58

标签: javascript backbone.js

我有一个骨干模型,我在其中更改了set方法,以计算每组模型的额外属性。

根据文档,这应该是调用super的方式,以确保模型实际保存。

Backbone.Model.prototype.set.call(this, attributes, options);

除非我使用Collection.create,否则它的工作方式与预期一致。

我的自定义set方法已运行,但我认为原始版本没有,因为该集合仍为空。 服务器接收正确的数据并发回正确的数据。在两种情况下我的方法都会被执行,但是这个集合仍然是空的。

我可以更改超级调用以使其与Collection.create一起使用,还是有其他方法可以执行相同的操作?

2 个答案:

答案 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回调调用successModel.save将数据发送到服务器,并链接到调用success的{​​{1}}回调。

我会在Model.set回调中为这两个函数添加断点,因为它们非常直接,可能会指出您的问题。

最后,如果您能够使用jsFiddle重现问题,那么帮助我们了解问题的完整背景将非常有用。