绑定骨干模型中的“变化”不起作用

时间:2011-04-25 09:57:40

标签: backbone.js

这是Example

我正在关注Thomas Davis的这篇优秀教程:What is a model? 不知怎的,“改变”绑定没有触发。我在这里做错了什么?

3 个答案:

答案 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)

我们可以将它作为一个集合使用,而不是将子节点用作普通数组,而是收听添加,删除集合中的事件。