Javascript 如何强制调用模型事件
我编写了一个函数,它将在模型属性更改时触发,如下所示Javascript 如何强制调用模型事件,javascript,backbone.js,Javascript,Backbone.js,我编写了一个函数,它将在模型属性更改时触发,如下所示 modelEvents:{ "change:Name":"callback1" }, callback1:function(){ console.log("This is testing"); } 最初我设置了model.set(“Name”,“hi”)以便自动调用callback1。同样,如果我在model中设置相同的值,callback1不会触发,因为model属性未修改。所以每次我在下面做这个 model.set({"Name
modelEvents:{
"change:Name":"callback1"
},
callback1:function(){
console.log("This is testing");
}
最初我设置了model.set(“Name”,“hi”)
以便自动调用callback1
。同样,如果我在model中设置相同的值,callback1
不会触发,因为model属性未修改。所以每次我在下面做这个
model.set({"Name":""},{silent:true});
model.set({"Name":"hi"});
如果我确实喜欢上面的方法,它工作得很好,但是我想知道是否有任何选项(比如静默)可以强制调用回调
谢谢。如果您想传递一个选项,那么实现这一点的唯一方法就是在您的模型中使用类似的内容覆盖set方法,尽管我还没有对此进行测试以确保它不会产生意外的结果
set: function(key, val, options) {
//call the origonal set so everything works as normal
Backbone.Model.prototype.set.call(this, key, val, options);
current = this.attributes, prev = this._previousAttributes;
if (typeof key === 'object') {
attrs = key;
options = val;
} else {
(attrs = {})[key] = val;
}
options || (options = {});
//new option to always trigger the change on an attribute
if (options.loud) {
for (var key in attrs) {
//if the value is the same as before trigger the change
//otherwise backbone will have already triggered the chage
if (_.isEqual(prev[key] , attrs[key])) {
this.trigger('change:' + key, this, current[key], options);
}
}
}
}
然后,为了利用它,调用正常集合,但要大声传递true
this.model.set({
name: "Hi"
}, {
loud: true
});
这里有一把利用它的小提琴
为了显示即使在属性相同的情况下也会触发事件,我添加了一个名为renders的属性,以显示它被调用了多少次。为什么不为此使用Model.hasChanged?基本上,它将侦听属性中的更改
看看这里
希望它有帮助model.trigger('change:Name')?您可以在不更改属性的情况下手动触发更改事件下面的任何答案都是您想要的吗?