gpt4 book ai didi

javascript - Knockout 可观察订阅触发多次

转载 作者:行者123 更新时间:2023-11-30 12:41:00 25 4
gpt4 key购买 nike

我在某个函数中有一个可观察的订阅,该函数会重复某些事件:

ko.computed(function() {
alert('computed fired');

self.obs2.subscribe(function() {
alert('subscribe fired');
});

return self.obs1();
});

我注意到,当该函数运行时,订阅内的代码没有执行,但当订阅最终触发时,其中的代码运行的次数与重复函数在触发前运行的次数一样多。

在 JSfiddle 中复制它太复杂了,所以我选择了一个更简单但类似的例子,在 computed observable 中使用订阅:

http://jsfiddle.net/norbiu/7hGNb/

  1. 点击“编辑 Obs2”几次将导致每次都触发警报
  2. 点击“编辑 Obs1”几次将触发第一个警报,而不是订阅内的警报
  3. 单击“编辑 Obs2”一次将导致订阅内的警报运行多次。

有没有办法让订阅只运行一次而不必将其移出重复?

最佳答案

您将在obs2 上订阅您的computed 评估次数。

我不知道您想通过订阅计算中的不同属性来实现什么。我很确定您的用例存在更合适的解决方案...

然而,一种可能的解决方法是在调用 subscribe 时存储返回的 subscription 对象,如果存在已存储的 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();
});

演示 JSFiddle .

关于javascript - Knockout 可观察订阅触发多次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24467268/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com