我正在寻找一种方法来设置一个回调函数,该函数将在每个ViewModel中的每个observable之后调用。
类似于ajaxSend和ajaxComplete的jquery,其中每个ajax调用后都会调用一个函数。
在淘汰赛中寻找类似的内容后,我发现只有少数内容:e xplicitly subscribing to observables和computed observables。这两件事都没有解决我的问题,因为我有很多ViewModel,因此使用这种方式我将被强制在每个ViewModel中重复代码。
在淘汰赛中有没有办法订阅任何模型中任何观察者的变化?
答案 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。