在淘汰赛中我想写一个ComputedObservable,它是根据不可观察的值计算出来的。我想手动触发通知。
这有可能吗?
答案 0 :(得分:1)
计算变量只不过是一个在其中的所有可观察对象上注册自定义事件的函数。
当您的内部可观察变量发生变化时,它会广播notify
事件,并且所有侦听器都会捕获事件并进行相应处理。
这个过程听起来很简单但是当你计划在普通的Javascript变量上使用时却不是这样。您可以参考Listening for variable changes in JavaScript or jQuery。
现在,如果您希望手动实现这一基本挑战:
total
变量一样。我的建议是,使用带有可观察量的计算(或纯度计算,如果在KO3.2之上或之上)。这样您就可以节省大量代码。淘汰赛团队必须经历这些问题并在其代码中添加了处理。重新发明轮子会在codeBase中添加大量代码,如果没有适当的文档,将难以维护。
以下是Fiddle我在其中复制textInput
绑定数字输入。如果你看到,他们分别处理 IE10 , IE9 和 IE8或以下。他们甚至对5岁以下的 safari进行了特殊处理。
答案 1 :(得分:0)
我完全赞同在计算中使用ko.observable
变量的其他答案。如果重新评估不是自动化的,我不明白你为什么要使用计算机。我建议改为创建一个普通函数。
我看到的最接近的方法是创建一个计算所订阅的虚拟observable。您可以致电valueHasMutated
强制重新评估:
var a = "A";
var b = "B";
var subscriptionObs = ko.observable();
var ab = ko.pureComputed(function() {
subscriptionObs();
return a + b;
});
ko.applyBindings({ab: ab });
b = "C";
subscriptionObs.valueHasMutated();
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<p data-bind="text: ab"></p>