这是Example
我正在关注Thomas Davis的这篇优秀教程:What is a model? 不知怎的,“改变”绑定没有触发。我在这里做错了什么?
答案 0 :(得分:16)
Backbone正在检查设定值是否与之前的值相同(查看https://github.com/documentcloud/backbone/blob/master/backbone.js#L210并开启)。
在您的示例中,数组仍然相同,但内部值已更改。这很难解决。创建数组的新副本似乎是开销。我建议直接在你的采用函数中调用change事件作为解决方案:
adopt: function(newChildsName){
var children_array = this.get('children');
children_array.push(newChildsName);
this.set({children:children_array});
this.trigger("change:children");
}
我建议在骨干github存储库上创建一个问题,可能会添加一个“强制”选项来强制模型上属性的更新(从而触发事件)。
答案 1 :(得分:4)
这是一个有点尴尬的解决方案:
adopt: function(newChildsName){
var children_array = this.get('children').splice(0);
children_array.push(newChildsName);
this.set({children:children_array});
}
答案 2 :(得分:1)
我们可以将它作为一个集合使用,而不是将子节点用作普通数组,而是收听添加,删除集合中的事件。