【问题标题】:KnockoutJS - Bind only the initial valueKnockoutJS - 仅绑定初始值
【发布时间】:2012-05-04 11:47:10
【问题描述】:

有没有一种干净的方法可以使用 KnockoutJS 仅将 observable 的初始值绑定到 dom 元素?

我知道您可以通过绑定到不可观察属性来实现这一点,但我宁愿不创建多余的属性来保存另一个可观察属性的初始值。

我试过了,但无济于事——属性仍然会随着每次更改而更新

<input type="text" id="tbName" 
  data-bind="value:name, attr: { 'data-initialnamevalue': ko.utils.unwrapObservable($data.name()) }" />

【问题讨论】:

  • 如果它是您的视图模型的一部分,这并不是多余的。 Knockout 上的文档说,如果您希望 DOM 和数据保持同步,则仅使用 observables。听起来你不想要这种行为。我只会使用普通的旧房产。
  • 这是style 的示例,但同样适用于attrjsfiddle.net/rniemeyer/3Pyun
  • 感谢@RPN 一直以来 - 我会将该评论作为没有直接方法的证据,所以我会接受马特的回答。

标签: javascript knockout.js


【解决方案1】:

您可以通过添加括号直接绑定到可观察值而不是可观察值,以便在首次绑定时注入该值。当元素更新时,它不会更新 observable,因为绑定是在值上而不是 observable 上(即它不知道如何调用 observable 函数来设置值)。

<input type="text" id="tbName" data-bind="value: name()" />

【讨论】:

    【解决方案2】:

    虽然我同意上面的 Zero21xxx,但我想您可以使用自定义绑定,在其中提供 init 方法,但不提供更新方法。

    与仅仅添加另一个属性相比,不确定是否值得付出努力。

    这里有一个简单的例子来说明我的意思:http://jsfiddle.net/ZkFRu/3/

    第一段绑定属性的当前值,第二段绑定初始值。单击按钮会增加属性。

    【讨论】:

      猜你喜欢
      • 2012-10-09
      • 1970-01-01
      • 1970-01-01
      • 2015-06-30
      • 2014-08-27
      • 2013-02-08
      • 1970-01-01
      • 2012-06-18
      • 1970-01-01
      相关资源
      最近更新 更多