を使用してモデルにデータを入力する必要がありますko.mapping.fromJS
。次のスニペット ( http://jsfiddle.net/XBYhv/ ) を実行すると、すべて問題people.firstName
なく更新され、新しいprop2
プロパティがモデルに追加されます。
var Person = function() {
this.lastName = ko.observable('lastName');
this.firstName = ko.observable('firstName');
};
var DataModel = function() {
this.people = ko.observable(new Person());
this.prop1 = ko.observable('prop1');
};
var vm = function(){
this.data = new DataModel();
this.log = function(){
console.log(this.data, this.data.people());
};
this.update = function(){
ko.mapping.fromJS(
{
people: { firstName: 'firstName updated'},
prop2: 'prop2'
}
,{}, this.data);
}
};
ko.applyBindings(new vm());
people
次に、配列に変換してモデルを少し変更します( http://jsfiddle.net/XBYhv/1/ ):
. . .
this.people = ko.observableArray([new Person()]);
. . .
ko.mapping.fromJS({
people: [{ firstName: 'firstName updated'}],
. . .
そして今、悪いことが起こります: people
object は破棄されて に置き換えられ、単に更新される代わりに[{ firstName: 'firstName updated'}]
失われます。lastName
firstName
このような動作の理由と、この場合のモデルを更新する正しい方法について、誰でも光を当てることができますか?