Knockout -带有手动更改通知的计算观察对象
Knockout - Computed Observable with manual Change notification
在knockout中,我想写一个computedoobservable,它是从不可观察的值计算出来的。我想手动触发通知。
这可能吗?
计算变量只是一个函数,它在其中的所有可观察对象上注册自定义事件。
当你的内部可观察变量发生变化时,它广播一个notify
事件,所有的侦听器捕获该事件并相应地处理。
这个过程听起来很简单,但当您计划使用纯Javascript变量时就不是这样了。您可以参考侦听JavaScript或jQuery中的变量更改。
现在,如果您希望手动实现这一点,基本挑战:
- 变量可以随时随地更改。您必须手动在各处触发它们的notify事件。如果你错过了,你将得到不正确的数据。
- 你还必须为绑定添加eventListeners。像
total
变量,应该计算。 - 浏览器支持。IE8或之前版本不支持自定义事件,你必须为它添加hack。
我的建议,使用computed(或pureComputed,如果在KO3.2或以上)与可观察对象。这样可以节省大量代码。淘汰赛团队必须经历过这些问题,并在他们的代码中添加了处理方法。你重新发明轮子会在你的代码库中添加大量的代码,如果没有适当的文档,将很难维护。
下面是一个小提琴,我复制了textInput
绑定的数字输入。如果你看到,他们有单独的处理IE10, IE9和IE8或以下。他们甚至对safari小于5有特殊处理。
我完全同意在计算中使用ko.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>
相关文章:
- 根据元素和容器大小计算边距
- 从Rally获取一个特定的标记,以便计算另一个字段中的值
- Firebase2(Firebase.google.com)推送通知-从外部管理
- 使用D3.js计算带有字母间距的文本长度
- 使用CSS或JavaScript计算分页符的数量
- 可以't计算自定义谷歌地图的js
- 如何计算每个元素's的高度,并将这些值用作函数中的变量
- JavaScript计算帮助(乘以时间)
- 如何计算对象文字中的键
- JavaScript循环无法正确计算/显示结果
- 与域在同一台计算机上运行的NODEJS服务器的CORS错误
- 无法在窗口内使用rootScope.通知
- JS,用于播放提示音以通知未按预期工作
- 四舍五入JavaScript计算
- 计算HTML中的页数
- 使用jQuery计算数组中的对象以更改进度条
- 如何在jquery中使用实时计算求和值
- 计算多个项目的价格
- 计算CSS3缩放框在另一个框中的最高位置
- Knockout -带有手动更改通知的计算观察对象