2014-03-30 22 views
1

我正在尋找一種方法來設置一個回調函數,該函數將在每個ViewModel中的每個observable之後被調用。爲每個ViewModel的每個observable設置回調函數

類似於ajaxSendajaxComplete與jquery其中一個函數將在每個Ajax調用後調用。

在淘汰賽中尋找這樣的東西后,我發現只有幾件事:e xplicitly subscribing to observables和使用computed observables。這些東西都不能解決我的問題,因爲我有很多ViewModel,因此使用這種方式我將在每個ViewModel中強制重複代碼。

是否有一種方法在基因敲除中訂閱任何模型中的任何可觀察變化?

回答

1

你可以嘗試做這樣的事情:

1)創建函數,要被調用時,在任何視圖模型任何可觀察到的變化(第一個參數 - 值,第二 - 事件類型,相同subscribe函數的第三個參數):

function extendNotification(valueToNotify, event) { 
    if (event != "beforeChange") { 
     console.log("extend notification: " + valueToNotify); 
    } 
}; 

2)創建輔助包裝:

function beforeWrapper(fnBefore, fnOriginal) { 
    return function() { 
     fnBefore.apply(this, arguments); 
     return fnOriginal.apply(this, arguments); 
    }; 
}; 

3),敷ko.subscribable.fn.notifySubscribers函數,其中y我們的擴展:

ko.subscribable.fn.notifySubscribers = 
    beforeWrapper(extendNotification, ko.subscribable.fn.notifySubscribers); 

可能這不是您的問題的最佳解決方案,但你可以修改它,如果你想。
演示Fiddle