2012-07-06 111 views
0

我的问题是为什么当我清除它们时,我的两个数据绑定输入字段的行为不同,尽管据我所知它们的设置方式与在knockout中计算的可观察值相同。敲除可观察行为

使用此琴: http://jsfiddle.net/ya7eF/167/

的“分钟”字段工作正常,“小时”字段是不是。要重现我的问题,请按照以下步骤操作。当我从Duration'hrs'字段中删除文本时,我想了解为什么它不会在模糊上替换为零,如min字段。

  1. 从第二个持续时间('min')文本字段中删除文本('30'),然后失去对该字段的焦点。将空字符串替换为零,并更新其他计算的可观察对象(结束时间)。如预期的。
  2. 重新运行小提琴。从持续时间 '小时' 文本字段
  3. 删除文本( '0')
  4. 模糊处理 '小时'
  5. 没有任何反应;几小时内计算的observable的'read'方法甚至都不会被调用。我无法弄清楚两个观察者之间的区别。

回答

1

在第二种情况下,Duration可观察值没有实际变化。当observable的值设置为当前值时,则不会向用户发送通知。这意味着您的计算的观测值的读取功能不会被触发。

解决此问题的一种技术是使用可观察的valueHasMutated函数来确保发送通知。为避免多次通知,你可以这样做:

 if (totalMinutes !== self.Duration()) { 
      self.Duration(totalMinutes); 
     } 
     self.Duration.valueHasMutated(); 

这里是你的样品更新:http://jsfiddle.net/rniemeyer/ya7eF/168/