2012-04-23 44 views
0

有没有一种干净的方式来使用KnockoutJS仅将observable的初始值绑定到dom元素?KnockoutJS - 只绑定初始值

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

我想这一点,但都无济于事,属性仍与每一个变化

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

如果它是视图模型的一部分,它不是多余的。关于Knockout的文档说只有在DOM和数据保持同步时才使用observables。这听起来像你不想要这种行为。我只是使用普通的旧物业。 – arb 2012-04-23 20:30:50

+0

这里是'style'的例子,但是'attr'也一样:http://jsfiddle.net/rniemeyer/3Pyun/ – 2012-04-23 20:39:21

+0

谢谢@ albert @RPN - 我会把这个评论当作证据,证明没有直接的方式,所以我会接受马特的答案。 – 2012-04-23 20:42:11

回答

1

虽然我上面Zero21xxx同意,我想你可以使用自定义的结合,其中您提供一个init方法更新,但没有更新方法。

不知道这是值得的努力与只是添加另一个属性。

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

第一款结合属性的当前值,第二个绑定的初始值。点击按钮增加属性。

0

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

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