我有一个特殊的淘汰观察,它在许多计算函数中使用,并且它完全按照预期工作。但是,在其中一个计算函数中,我不希望它在更新observable时触发。代码方面它看起来像这样:
self.obs1 = ko.observable(foo);
self.obs2 = ko.observable(bar);
//I want this computed to behave normally
this.comp1 = ko.computed(function() {
return self.obs1() + self.obs2();
}, this);
//I want this computed to trigger on obs1 update but ignore updates to obs2
this.comp2 = ko.computed(function() {
return self.obs1() + self.obs2();
}, self);
setTimeout(function() {
self.obs1(20);
self.obs2(15);
}, 1000);
请注意,执行comp2时我仍然需要能够访问obs2的当前值我只是不想更新obs2来触发comp2有一个新值。
这可能吗?
答案 0 :(得分:2)
要使其忽略对可观察对象的更新,请使用<span id="smaxResult">Some text for test</span>
(docs):
peek
函数允许您在不创建依赖项的情况下访问可观察或计算的observable。
更新示例:
peek
答案 1 :(得分:0)
好的,所以我想出了如何做到这一点。如果你创建一个只返回你想要延迟的observable的新计算器,那么将它限制到一个它永远不会命中的点,你只需使用计算代替observable。如果将来因任何其他原因触发计算得到的话,这也会使它始终使用最新的obs2值。
self.obs2DelayComp = ko.computed(function() {
return self.obs2();
}).extend({ rateLimit: 3001 });