簡體   English   中英

如何強制調用模型事件

[英]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的屬性以顯示已被調用多少次。

為什么不為此使用Model.hasChanged? 基本上,它將監聽屬性中的更改。

在這里看看。

http://backbonejs.org/#Model-hasChanged

希望能幫助到你

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM