【问题标题】:Knockout observable behavior淘汰赛可观察行为
【发布时间】:2012-07-07 07:36:23
【问题描述】:

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

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

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

  1. 从第二个持续时间 ('min') 文本字段中删除文本 ('30'),然后失去对该字段的关注。空字符串被零替换,并且其他计算的 observables(结束时间)被更新。根据需要。
  2. 重新运行小提琴。
  3. 从 Duration 'hrs' 文本字段中删除文本 ('0')
  4. 模糊“小时”
  5. 什么都没有发生;计算的可观察数小时的“读取”方法甚至不会被调用。我无法弄清楚这两个可观察对象之间有什么区别。

【问题讨论】:

    标签: knockout.js observable


    【解决方案1】:

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

    解决这个问题的一种技术是使用 observable 的 valueHasMutated 函数来确保通知被发送出去。为避免多次通知,您可以执行以下操作:

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

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

    【讨论】:

      猜你喜欢
      • 2014-11-05
      • 2012-09-08
      • 2015-01-25
      • 2018-03-30
      • 1970-01-01
      • 2015-10-05
      • 2016-05-10
      • 2014-06-08
      相关资源
      最近更新 更多