2013-07-10 58 views
0

是否有可能知道如果Backbone.Model.set()已經改變/沒有改變任何事情,如果可能的話沒有事件?原因是:如果我使用的事件它看起來像:知道Backbone.Model.set是否改變/不改變任何東西

  • 聽改變:一些
    • 如果值已更改
  • model.set(「東西」,「價值」做些什麼)

但是,如果沒有發生變化呢?我如何知道這一點?還有事件處理程序,我需要將它們合適地移除。例如,如果我這樣做,我需要刪除處理程序,如果沒有發生變化

+0

如果沒有發生變化事件不會發生....我會堅持事件,骨幹是一個事件驅動的庫...給你的用例,如果你想更好的回答 – imrane

回答

1

這是一個簡單的解決方案,隱藏事件,成爲一個簡單的同步函數,返回如果設置有效果。

我選擇在不同的函數名稱中實現此功能,但您也可以覆蓋默認設置行爲。

var M = Backbone.Model.extend({ 
    setThatLetsYouKnow: function(key, value){ 
    var thisSetHasEffect = { flag: false}; 
    this.listenToOnce(this, "change", function(){ 
     thisSetHasEffect.flag = true; 
    }); 
    this.set(key, value); 
    return thisSetHasEffect.flag; 
    } 
}); 

,其結果是:

var m = new M(); 
m.setThatLetsYouKnow("key",2)// return true 
m.setThatLetsYouKnow("key",2)// reutrn fasle 

當然,你需要支持添加到所有不同類型的設置參數的,這僅僅是個構想。

+0

@Jiew Meng - 順便說一下,這個實現基於集合偵聽器的當前Backbone.js實現,它發生在集合的同一個同步流程中(與setTimeout實現相反) – ekeren

相關問題