Events backbonejs model.set,在任何情况下触发事件
是否有一种方法可以强制更改:即使属性数据没有更改,也可以使用model.set()触发属性事件Events backbonejs model.set,在任何情况下触发事件,events,backbone.js,Events,Backbone.js,是否有一种方法可以强制更改:即使属性数据没有更改,也可以使用model.set()触发属性事件 model.set('attribute', 2); // will trigger the change:attribute event model.set('attribute', 2); // will not trigger again since the value has not changed 那么,即使值没有改变,有没有办法触发第二个集合? 谢谢您的时间。如果不覆盖主干网.Model
model.set('attribute', 2); // will trigger the change:attribute event
model.set('attribute', 2); // will not trigger again since the value has not changed
那么,即使值没有改变,有没有办法触发第二个集合?
谢谢您的时间。如果不覆盖主干网.Model.set(…),就不能了。我从来都不需要这个功能。。。“只有在事件发生变化时才触发事件”的设计鼓励了事件传播的最佳实践。但您可以只提供一个方法,该方法会自动删除该值,然后立即重新设置该值 编辑:Per
mu太短
下面的注释,您还需要处理setloudy
被赋予属性散列的可能性。因此,需要清楚地处理单个属性和散列的方法:
var MyModel = Backbone.Model.extend({
setLoudly: function(attr, value, options) {
this.unset(attr, { silent: true });
return Backbone.Model.prototype.set.call(this, attr, value, options);
},
clearSilently: function(attr) {
if (_.isString(attr)) {
this.unset(attr, { silent: true });
} else {
_.each(_.keys(attr), function(key) {
this.unset(key, { silent: true });
}, this);
}
}
});
var myModel = new MyModel({
foo: "bar",
baz: 4
});
myModel.set('foo', 'bar'); // <<=== No Event
myModel.setLoudly('foo', 'bar'); // <<=== One 'change change:foo' event
myModel.set({
foo: "bar",
baz: 4
}); // <<=== No Events
myModel.setLoudly({
foo: "bar",
baz: 4
}); // <<=== Will receive 'change change:foo change:baz'
var MyModel=Backbone.Model.extend({
设置:函数(属性、值、选项){
this.unset(attr,{silent:true});
返回Backbone.Model.prototype.set.call(this、attr、value、options);
},
清晰:函数(属性){
if(u.isString(attr)){
this.unset(attr,{silent:true});
}否则{
_.每个(u.keys(attr)、函数(key){
this.unset(键,{silent:true});
},这个);
}
}
});
var myModel=新的myModel({
福:“酒吧”,
巴兹:4
});
myModel.set('foo','bar');// 如果不重写主干.Model.set(…)
,则不能执行此操作。我从来都不需要这个功能。。。“只有在事件发生变化时才触发事件”的设计鼓励了事件传播的最佳实践。但您可以只提供一个方法,该方法会自动删除该值,然后立即重新设置该值
编辑:Permu太短
下面的注释,您还需要处理setloudy
被赋予属性散列的可能性。因此,需要清楚地处理单个属性和散列的方法:
var MyModel = Backbone.Model.extend({
setLoudly: function(attr, value, options) {
this.unset(attr, { silent: true });
return Backbone.Model.prototype.set.call(this, attr, value, options);
},
clearSilently: function(attr) {
if (_.isString(attr)) {
this.unset(attr, { silent: true });
} else {
_.each(_.keys(attr), function(key) {
this.unset(key, { silent: true });
}, this);
}
}
});
var myModel = new MyModel({
foo: "bar",
baz: 4
});
myModel.set('foo', 'bar'); // <<=== No Event
myModel.setLoudly('foo', 'bar'); // <<=== One 'change change:foo' event
myModel.set({
foo: "bar",
baz: 4
}); // <<=== No Events
myModel.setLoudly({
foo: "bar",
baz: 4
}); // <<=== Will receive 'change change:foo change:baz'
var MyModel=Backbone.Model.extend({
设置:函数(属性、值、选项){
this.unset(attr,{silent:true});
返回Backbone.Model.prototype.set.call(this、attr、value、options);
},
清晰:函数(属性){
if(u.isString(attr)){
this.unset(attr,{silent:true});
}否则{
_.每个(u.keys(attr)、函数(key){
this.unset(键,{silent:true});
},这个);
}
}
});
var myModel=新的myModel({
福:“酒吧”,
巴兹:4
});
myModel.set('foo','bar');// 在模型上设置属性时,主干将基本上检查新属性是否与当前属性不同,然后触发更改事件。没有替代此行为的选项。您可以尝试以下操作之一:
更改主干源以覆盖此行为-删除检查。(不推荐)
像Peter Wagner建议的那样重写主干.Model.set(…)
手动触发更改事件:
model.set('attribute', 2, {silent:true}); //Pass silent to prevent 2 change events if the attribute actually changed.
model.trigger('change');
在模型上设置属性时,主干将基本上检查新属性是否与当前属性不同,然后触发更改事件。没有替代此行为的选项。您可以尝试以下操作之一:
更改主干源以覆盖此行为-删除检查。(不推荐)
像Peter Wagner建议的那样重写主干.Model.set(…)
手动触发更改事件:
model.set('attribute', 2, {silent:true}); //Pass silent to prevent 2 change events if the attribute actually changed.
model.trigger('change');
非常正确。扩展解决方案以解决问题。非常正确。扩展解决方案以解决此问题。