敲除可观察行为
问题描述:
我的问题是为什么当我清除它们时,我的两个数据绑定输入字段的行为不同,尽管据我所知它们的设置方式与在knockout中计算的可观察值相同。敲除可观察行为
使用此琴: http://jsfiddle.net/ya7eF/167/
的“分钟”字段工作正常,“小时”字段是不是。要重现我的问题,请按照以下步骤操作。当我从Duration'hrs'字段中删除文本时,我想了解为什么它不会在模糊上替换为零,如min字段。
- 从第二个持续时间('min')文本字段中删除文本('30'),然后失去对该字段的焦点。将空字符串替换为零,并更新其他计算的可观察对象(结束时间)。如预期的。
- 重新运行小提琴。从持续时间 '小时' 文本字段
- 删除文本( '0')
- 模糊处理 '小时'
- 没有任何反应;几小时内计算的observable的'read'方法甚至都不会被调用。我无法弄清楚两个观察者之间的区别。
答
在第二种情况下,Duration
可观察值没有实际变化。当observable的值设置为当前值时,则不会向用户发送通知。这意味着您的计算的观测值的读取功能不会被触发。
解决此问题的一种技术是使用可观察的valueHasMutated
函数来确保发送通知。为避免多次通知,你可以这样做:
if (totalMinutes !== self.Duration()) {
self.Duration(totalMinutes);
}
self.Duration.valueHasMutated();
这里是你的样品更新:http://jsfiddle.net/rniemeyer/ya7eF/168/