【发布时间】:2014-06-28 21:42:18
【问题描述】:
我在一个函数内有一个可观察的订阅,它在某些事件上重复:
ko.computed(function() {
alert('computed fired');
self.obs2.subscribe(function() {
alert('subscribe fired');
});
return self.obs1();
});
我注意到,当该函数运行时,订阅中的代码并未执行,但当订阅最终触发时,其中的代码运行次数与重复函数在触发前运行的次数一样多。
在 JSfiddle 中重现太复杂了,所以我选择了一个更简单但类似的示例,在 computed observable 中使用订阅:
http://jsfiddle.net/norbiu/7hGNb/
- 点击“Edit Obs2”几次会导致每次触发警报
- 点击“Edit Obs1”几次会触发第一个警报,而不是订阅内的警报
- 单击“编辑 Obs2”一次将导致订阅内的警报运行多次。
有没有办法让订阅只运行一次而不必将其移到重复之外?
【问题讨论】:
-
您的示例过于简单。为什么需要在计算的内部订阅?你想达到什么目的?因为唯一的解决方案是将订阅移到您不想做的计算之外......