是否有可能知道如果Backbone.Model.set()
已經改變/沒有改變任何事情,如果可能的話沒有事件?原因是:如果我使用的事件它看起來像:知道Backbone.Model.set是否改變/不改變任何東西
- 聽改變:一些
- 如果值已更改
- model.set(「東西」,「價值」做些什麼)
但是,如果沒有發生變化呢?我如何知道這一點?還有事件處理程序,我需要將它們合適地移除。例如,如果我這樣做,我需要刪除處理程序,如果沒有發生變化
是否有可能知道如果Backbone.Model.set()
已經改變/沒有改變任何事情,如果可能的話沒有事件?原因是:如果我使用的事件它看起來像:知道Backbone.Model.set是否改變/不改變任何東西
但是,如果沒有發生變化呢?我如何知道這一點?還有事件處理程序,我需要將它們合適地移除。例如,如果我這樣做,我需要刪除處理程序,如果沒有發生變化
這是一個簡單的解決方案,隱藏事件,成爲一個簡單的同步函數,返回如果設置有效果。
我選擇在不同的函數名稱中實現此功能,但您也可以覆蓋默認設置行爲。
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
當然,你需要支持添加到所有不同類型的設置參數的,這僅僅是個構想。
@Jiew Meng - 順便說一下,這個實現基於集合偵聽器的當前Backbone.js實現,它發生在集合的同一個同步流程中(與setTimeout實現相反) – ekeren
如果沒有發生變化事件不會發生....我會堅持事件,骨幹是一個事件驅動的庫...給你的用例,如果你想更好的回答 – imrane