Javascript backbone.js:将属性设置为现有值时激发的模型事件?

Javascript backbone.js:将属性设置为现有值时激发的模型事件?,javascript,backbone.js,Javascript,Backbone.js,在backbone.js中,我注意到如果将模型的属性设置为其现有属性,则更改和模型上的所有事件不会触发 例如,如果我设置了以下事件: ActiveUser.bind('change', this.displayActiveUser, this); ActiveUser.bind('all', this.displayActiveUserAll, this); 然后我手动将ActiveUser的值设置为空字符串: ActiveUser.set({ text : '' }); 当且仅当Act

在backbone.js中,我注意到如果
模型的属性设置为其现有属性,则
更改
模型上的所有
事件不会触发

例如,如果我设置了以下事件:

 ActiveUser.bind('change', this.displayActiveUser, this);
 ActiveUser.bind('all', this.displayActiveUserAll, this);
然后我手动将ActiveUser的值设置为空字符串:

ActiveUser.set({ text : '' });
当且仅当
ActiveUser.text
未设置为空字符串时,事件才会触发

这是合理的行为。但是,是否有一个即使设置的值是现有值也会触发的事件


更新:我在官方Backbone.js中没有看到任何内容。嗯。

看起来您需要一个主干.Model子类,它是您自己的任何模型类的父类,您自己的模型类需要这种行为。重写
set
方法,并沿这些行执行某些操作。仅在更改时触发事件的逻辑被编码到
Backbone.Model.set
中,这种方式不容易支持添加新选项

(…摘录…)


您始终可以使用
ActiveUser.trigger('change')手动触发更改事件

如亚伯拉罕所说,手动触发更改事件

MyModel.trigger('change')
因此,可以手动触发更改事件,但在某些情况下无法正常工作。当你的渲染方法从模型中获取属性时,模型最初是空的,所以如果你的代码在模型上设置了一些东西,并且在那条直线之后,你就说:“代码> MyVIEW。
那么,渲染方法可能会更快,甚至不会采用新设置的属性

快速破解的替代方案可能是每次设置某个对象时,生成随机数并将其传递给模型:

MyModel.set({myProperty:something,rand:Math.random()});

所以,在这种情况下,你们可以肯定,模型总是会因为某些东西发生了变化而触发变化事件,但它是黑客行为,若你们有很多事情要做,那个么你们的应用程序就会变成随机数计算器


或者使用Peter Lyons方法。

您可以随时手动运行
ActiveUser.trigger('change')
谢谢-这就是我要做的!我补充了我的评论作为回答。黑客的替代方案当然有效,但直接触发比这更明显。
MyModel.set({myProperty:something,rand:Math.random()});
MyModel.set({myProperty:something,t:(new Date).getTime()});