knockout.js 淘汰-通过手动变更通知计算的可观察值

xlpyo6sf  于 2022-11-10  发布在  其他
关注(0)|答案(2)|浏览(146)

在knockout中,我想写一个ComputedObservable,它是从不可观察的值中计算出来的。我想手动触发通知。
这可能吗?

j9per5c4

j9per5c41#

一个计算变量就是一个函数,在它内部的所有可观察变量上注册自定义事件。
当内部可观察变量发生变化时,它会广播一个notify事件,所有侦听器都会捕获该事件并相应地进行处理。
这个过程听起来很简单,但当你打算在纯Javascript变量上使用时就不简单了。
现在,如果您希望手动实现这一目标,基本挑战是:

  • 一个变量可以随时随地改变。你将不得不在任何地方手动触发他们的通知事件。如果你错过了,你将得到不正确的数据。
  • 您还必须为绑定添加eventListeners。就像应该计算的total变量一样。
  • 浏览器支持。IE8或之前的版本不支持自定义事件,您必须添加相应的黑客程序。

我的建议是,使用calculated(或者pureComputed,如果在KO3.2或更高版本)和observables。这样你会保存很多代码。淘汰队肯定已经解决了这些问题,并在他们的代码中添加了处理。你重新发明的轮子会在你的代码库中添加很多代码,如果没有适当的文档,将很难维护。
下面是一个Fiddle,我在这里复制了textInput绑定来输入数字。如果你看到的话,他们对 IE10IE9 和 *IE8或更低 * 有单独的处理。他们甚至对 safari低于5 有特殊的处理。

sg3maiej

sg3maiej2#

我完全同意另一个答案,在计算中使用ko.observable变量。我不明白为什么要使用计算,如果它的重新求值不是自动的。我建议创建一个普通的函数来代替。
我认为最接近的方法是创建一个虚拟的可观测性,计算对象订阅它,你可以调用valueHasMutated来强制重新计算:
第一个

相关问题