考虑下面的代码片段:为什么我的Backbone模型hasChanged()总是返回false?
var m = new Backbone.Model({
name: 'joshua'
});
m.set('name', 'something else');
如果我现在请m.hasChanged()
或m.hasChanged('name')
我得到false
。 为什么?我的理解是,这两个应该返回true
。
m.changedAttributes()
也返回false。
这里是一个小提琴,说明我在做什么,并期待:http://jsfiddle.net/9cvVv/88/
编辑:看来,除非你通过{ silent: true; }
到set()
方法,然后将火在你的模型change
事件,清除了changedAttributes()
等。实质上,这些属性仅跟踪自上次触发事件以来的更改。
我在文档中阅读过,但一开始并没有真正理解它。
这对我来说似乎不是很有用。我将不胜感激任何解释,为什么这种方式的工作方式,以及达到我想要的结果的最佳方式。 (绕过{silent: true; }
,并放弃change
事件的用法似乎是一种浪费。)
嗯哼。我为发送一批模型并返回的集合做了一个'save()'方法。想知道为什么hasChanged()似乎没有做任何事情。 :-) 谢谢! – jmk2142 2012-03-28 23:16:03
这在Backbone的新版本中不再是真的;看到我的答案。 – pimlottc 2014-04-02 18:51:51
用骨干0.9.2保存我的一天... – gor181 2016-01-27 16:16:51