Я пытаюсь добавить объект по умолчанию к моему нокауту 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>
Script:
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
держа ссылку на тот же объект для eac h индекс.
Каков наилучший способ создать новый экземпляр моего объекта Knockout?
@jonhopkins - Это приведет к ошибке, когда 'метод AddPerson' называется. –
@jonhopkins - Не беспокойтесь, спасибо, что посмотрели. –