为knockout中的每个ViewModel设置每个observable的回调函数

时间:2014-03-30 12:05:26

标签: knockout.js knockout-3.0

我正在寻找一种方法来设置一个回调函数,该函数将在每个ViewModel中的每个observable之后调用。

类似于ajaxSendajaxComplete的jquery,其中每个ajax调用后都会调用一个函数。

在淘汰赛中寻找类似的内容后,我发现只有少数内容:e xplicitly subscribing to observablescomputed observables。这两件事都没有解决我的问题,因为我有很多ViewModel,因此使用这种方式我将被强制在每个ViewModel中重复代码。

在淘汰赛中有没有办法订阅任何模型中任何观察者的变化?

1 个答案:

答案 0 :(得分:1)

您可以尝试这样做:

1)创建函数,当任何viewModel中的任何observable发生变化时,你想要调用它(第一个参数 - 值,第二个 - 事件类型,与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函数:

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

可能它不是您问题的最佳解决方案,但如果您愿意,可以修改它 演示Fiddle