更新observableArray中的项目

时间:2013-08-02 10:05:41

标签: knockout.js

我有observableArray

self.items= ko.observableArray([]);

包含以下内容的项目

self.item = function () {
        this.number
    };

我有另一个对象人

self.people = ko.observableArray([]);

observableArray obj的person,其items observableArray

的实例

我可以添加到这些,并且一切正常。

当我尝试在item内的items数组中编辑person时出现问题。

这是项目的显示方式。

<!-- ko foreach:  items-->
    <input class="number" data-bind="value: number" />
<!-- /ko -->

有没有办法将更改绑定到特定项目?

1 个答案:

答案 0 :(得分:1)

如果正确嵌套视图模型,Knockout会将输入正确绑定到特定项目,而无需您做额外的工作。你还没有100%清楚你的视图模型是什么样的,但这里的设置应该有用。

假设您的两个视图模型如下所示:

var Item = function(name, nr) {
    this.name = ko.observable(name);
    this.number = ko.observable(nr);
};

var Person = function(name) {
    this.name = ko.observable(name);
    this.items = ko.observableArray([]);
};

,您的根视图模型的observableArray people如问题中所述,如下所示:

var vm = { people: ko.observableArray([]) }

有了这个,您可以将new Person个对象添加到people数组中,并为这些人提供Item个数组中的items个对象。

以下视图会为每个项目生成input个字段,其中的更改“与特定项目相关联”:

<div data-bind='foreach: people'>
    <h3 data-bind="text: name"></h3>
    <!-- ko foreach:  items-->
      <span data-bind="text: name"></span>:
      <input class="number" data-bind="value: number" />
    <!-- /ko -->
</div>

请参阅this fiddle了解演示。