0

Knockout に「デフォルト」オブジェクトを追加しようとしていますobservableArray。私のコードが現在立っている方法では、オブジェクトの新しいインスタンスではなく、まったく同じオブジェクトを配列に追加することになります。jQueryの を使ってみ.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 に答える