骨干的一些简单问题。这里有一些示例代码,而不是长篇描述:
var Group = Backbone.Model.extend({
defaults: {
Product: new Products()
},
initialize: function(data){
var _this = this;
var products = new Products(data.Product);
this.set('Product', products);
this.get('Product').each(function(product){
product.on('destroy', function(){
_this.trigger('change');
}, _this);
});
this.bind('change', this.update, this);
},
update: function(){
console.info("something changed");
console.log(this.get('Product').toJSON());
},
});
因此,组模型包含Product-collection,它显然包含产品。在初始化时,我试图确保在更改和销毁产品时将组的更新方法称为示例。所有似乎都运行得很好,事件被调用,属性看起来很棒,但是当我在产品模型中调用destroy方法时,它会失败。在更新中,我尝试打印产品集合的内容,我得到的产品是在删除之前完成的。如果我在500ms超时后调用此调试行,则内容正常。产品被移除等。
因此根据我的理解,调用产品的销毁事件,然后在实际从集合中删除之前将其传递给组。我做错了什么?
答案 0 :(得分:1)
Backbone通过监听模型上的destroy
事件来处理集合中已销毁模型的删除:请参阅Backbone.Model - destroy和Backbone.Collection - _onModelEvent的源代码。
无法保证执行处理程序的顺序,您将不得不使用其他内容。例如,收听集合上的destroy
事件,该事件会在模型实际删除后触发:
initialize: function(data){
var _this = this;
var products = new Products(data.Product);
this.set('Product', products);
this.get('Product').on("destroy", this.update, this);
this.bind('change', this.update, this);
},
请查看此小提琴http://jsfiddle.net/NUtmt/以获取完整示例。