1

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

类似于带有 jquery 的ajaxSendajaxComplete的东西,其中将在每次 ajax 调用后调用一个函数。

在淘汰赛中寻找类似的东西后,我只发现了几件事:明确订阅 observables并使用计算 observables。这些东西都不能解决我的问题,因为我有很多 ViewModel,因此使用这种方式我将被迫在每个 ViewModel 中重复代码。

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

4

1 回答 1

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);

可能它不是解决您问题的最佳解决方案,但您可以根据需要对其进行修改。
演示小提琴

于 2014-03-30T17:12:02.613 回答