0

我正在尝试向我的 Knockout 添加一个“默认”对象observableArray。我的代码目前的方式,我最终将完全相同的对象添加到数组中,而不是对象的新实例。我尝试使用 jQuery's .extend(),但是没有成功,所以我正在寻找输入。

这是一个展示我的问题的演示:http: //jsfiddle.net/2c8Fx/

HTML

<div data-bind="foreach: People">
    <input type="text" data-bind="value: Name" />
</div>

<button type="button" data-bind="click: AddPerson">Add Person</button>

<pre data-bind="text: ko.toJSON($data, null, 2)"></pre>

脚本

function ViewModel() {
    var self = this;

    self.EmptyPerson = ko.mapping.fromJS({Name: null, Age: null});
    self.People = ko.observableArray([self.EmptyPerson]);

    self.AddPerson = function() {
      self.People.push(self.EmptyPerson);  
    };
}

ko.applyBindings(new ViewModel());

这不起作用,因为observableArray实际上每个索引都持有对同一对象的引用。

创建 Knockout 对象的新实例的最佳方法是什么?

4

1 回答 1

2
function ViewModel() {
    var self = this;

    self.People = ko.observableArray();

    self.AddPerson = function() {
      self.People.push(ko.mapping.fromJS({Name: null, Age: null}));  
    };
}

ko.applyBindings(new ViewModel());

我这样做了,它就像你想象的那样工作。我希望这有帮助。

在这里查看一个工作示例

于 2013-05-23T20:48:46.497 回答