我在一个函数中有一个可观察的订阅,它重申某些事件:
ko.computed(function() {
alert('computed fired');
self.obs2.subscribe(function() {
alert('subscribe fired');
});
return self.obs1();
});
我注意到当该函数运行时,订阅中的代码没有执行,但是当订阅最终触发时,其中的代码运行的次数与重复函数在触发之前运行的次数相同。
在JSfiddle中重现太复杂了,所以我选择了一个更简单但类似的例子,在computed
observable中使用订阅:
http://jsfiddle.net/norbiu/7hGNb/
有没有办法让订阅只运行一次而不必将其移到重复之外?
答案 0 :(得分:2)
您将obs2
评估computed
次subscription
。
我不知道你想要在计算中的不同属性上订阅什么。我非常确定您的用例存在更合适的解决方案...
但是,一种可能的解决方法是在调用subscribe
时存储返回的subscription
对象,如果存在已存储的obs2
,则在再次订阅self.subscription = null;
ko.computed(function() {
alert('computed fired');
if (self.subscription)
self.subscription.dispose();
self.subscription = self.obs2.subscribe(function() {
alert('subscribe fired');
});
return self.obs1();
});
之前将其置于处理之前:
{{1}}
演示JSFiddle。