淘汰可观察的行为

时间:2012-07-06 20:11:50

标签: knockout.js observable

我的问题是为什么我清除它时两个数据绑定输入字段的行为会有所不同,尽管据我所知,它们的设置方式与淘汰时计算出的observables相同。

使用这个小提琴: http://jsfiddle.net/ya7eF/167/

'min'字段工作正常,'hrs'字段不正常。要重现我的问题,请按照以下步骤操作。当我从Duration'hrs'字段中删除文本时,我想了解为什么它不会被模糊的零替换,就像min字段一样。

  1. 从第二个持续时间('min')文本字段中删除文本('30'),然后失去对该字段的关注。空字符串将替换为零,并更新其他计算的可观察量(结束时间)。根据需要。
  2. 重新打开小提琴。
  3. 从持续时间'小时'文本字段
  4. 中删除文本('0')
  5. 模糊'小时'
  6. 什么都没发生;几小时计算的observable的'read'方法永远不会被调用。我无法弄清楚这两个可观测量之间有什么区别。

1 个答案:

答案 0 :(得分:1)

在第二种情况下,Duration可观察量的值实际上没有改变。当observable的值设置为其当前值时,则不会向订阅者发送通知。这意味着不会触发计算出的observable的读取函数。

处理此问题的一种方法是使用可观察的valueHasMutated函数来确保发送通知。要避免多次通知,您可以执行以下操作:

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

以下是您更新的示例:http://jsfiddle.net/rniemeyer/ya7eF/168/