KnockoutJS:将相同的ViewModel应用于多个div

时间:2014-05-02 07:32:20

标签: knockout.js

我有一个可以一遍又一遍地复制的div。我想使用KO将新的ViewModel实例绑定到每个新的div实例。通过阅读教程并通过示例,我无法理解这是如何实现的。

考虑一下:

<div id="div1">
    <input data-bind="value: firstName" />
</div>
<div id="div2">
    <input data-bind="value: firstName" />
</div>

<script>
    function ViewModel() {
        this.firstName = ko.observable("Test");
    }

    ko.applyBindings(new ViewModel());
</script>

这会将两个div上的输入字段绑定到相同的 ViewModel对象。换句话说,我想要做的是将ViewModel的新实例绑定到每个div。

1 个答案:

答案 0 :(得分:1)

清楚地写在documentation

  

或者,您可以传递第二个参数来定义所需文档的哪个部分   搜索数据绑定属性。例如, ko.applyBindings(myViewModel,   的document.getElementById(&#39; someElementId&#39;))即可。这限制了对元素的激活   使用ID someElementId及其后代,如果你想拥有多个,这很有用   查看模型并将每个模型与页面的不同区域相关联。

所以,考虑你的例子:

<div id="div1">
    <input data-bind="value: firstName" />
</div>
<div id="div2">
    <input data-bind="value: firstName" />
</div>

<script>
    function ViewModel() {
        this.firstName = ko.observable("Test");
    }

    var vm1 = new ViewModel();
    var vm2 = new ViewModel();

    ko.applyBindings(vm1, document.getElementById('div1'));
    ko.applyBindings(vm2, document.getElementById('div2'));

    vm2.firstName("Archie");
</script>