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

Mat*_*sen 4 javascript backbone.js

我有一个骨干模型,我已经改变了set方法来计算每组模型的额外属性.

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

Backbone.Model.prototype.set.call(this, attributes, options);
Run Code Online (Sandbox Code Playgroud)

除非我使用Collection.create,否则它会按预期工作.

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

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

Mat*_*sen 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);
    }
});
Run Code Online (Sandbox Code Playgroud)

  • 或者,实际上,您只需返回"超级"的结果,因为您实际上只是覆盖它:`return Backbone.Model.prototype.set.call(this,attributes,options);` (4认同)
  • 如果你返回这个,而不是调用Backbone.Model set方法,验证将不起作用,因为它应该适用于该模型.它永远不会返回false,在验证过程中出现错误时会发生什么. (4认同)