[英]How to invoke model events forcefully
我編寫了一個函數,它將在模型屬性更改時觸發,就像下面的方式一樣。
modelEvents:{
"change:Name":"callback1"
},
callback1:function(){
console.log("This is testing");
}
最初,我設置了model.set("Name","hi")
因此自動callback1
。 再一次,如果我在模型中設置了相同的值,則由於模型屬性未修改,因此不會觸發callback1
。 因此,為此,我每次在下面進行操作。
model.set({"Name":""},{silent:true});
model.set({"Name":"hi"});
如果我喜歡上面的方法,它可以正常工作,但是我想知道是否有任何選項(例如silent
)可以強制調用回調。
謝謝。
如果您想采用傳遞選項的方法,那么完成此操作的唯一方法是在模型中使用類似的方法覆蓋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);
}
}
}
}
然后使用它調用正常集,但loud: true
傳遞loud: true
this.model.set({
name: "Hi"
}, {
loud: true
});
在這里使用它的小提琴http://jsfiddle.net/leighking2/ktvj0kgp/為了顯示即使屬性相同也觸發了事件,我添加了一個稱為renders的屬性以顯示已被調用多少次。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.