【发布时间】:2017-03-06 23:49:51
【问题描述】:
这不是一个专门的技术问题,但我很好奇解决此类问题的最佳方法是什么?虽然我在 Knockout 中遇到了这个问题,但我确信该用例在其他地方也有效。
假设我订阅了 2 个变量,simpleObserve1,simpleObserve2,因此每次它们的值发生变化时,它们都会调用一个函数 resetAllValues()。
var simpleObserve1 = ko.observable(0), // initial values
simpleObserve2 = ko.observable(0); // initial values
var resetAllValues = function resetAllValues() {
/* this function takes all observable values and resets them */
{...}
}
simpleObserve1.subscribe(function(){
resetAllValues();
});
simpleObserve2.subscribe(function(){
resetAllValues();
});
simpleObserve1(5); // value changed anywhere in code
simpleObserve2(10); // value changed anywhere in code
这里有 2 个问题。
- 当resetAllValues()被调用时,它会将所有订阅的值变为0,包括
simpleObserve1和simpleObserve2。这反过来又一遍又一遍地调用resetAllValues()。如何防止它进入无限循环? - 如果我想同时更新两个变量,但只调用一次
resetAllValues(),该怎么办?
我尝试使用knockout's dispose() 方法来帮助我,但我想知道是否有更好的方法来做到这一点。
【问题讨论】:
标签: javascript knockout.js observer-pattern observable