Javascript backbone.js:将属性设置为现有值时激发的模型事件?
在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
将模型的属性设置为其现有属性,则更改和模型上的所有事件不会触发
例如,如果我设置了以下事件:
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()});