かなり単純な部分更新をしようとしています。最初は null であるビュー モデルのプロパティ「person」を、独自の子プロパティ「lastName」を持つオブジェクトで更新します。これは、サブスクライバーに通知しようとすると、「no method person.lastName()」で失敗します。
問題を示すフィドル: http://jsfiddle.net/P4Jd3/4/
HTML
<body>
<hr/>
<div data-bind="text: rootdata"></div>
<hr/>
<div data-bind="if: person">
<div data-bind="text: person.lastName()?person.lastName()+'###':'foo'">
</div>
</div>
<hr/>
<input type="submit" data-bind="click: updatedata" value="update data"></input>
</body>
JS:
newdata = {
person: {
lastName: "Mr.Bar"
},
rootdata : "Root 2"
}
model = {
self: this,
person : ko.observable(null),
rootdata : ko.observable("Init root"),
updatedata: function() {
ko.mapping.fromJS(newdata, {}, model);
}
}
ko.applyBindings(model);
更新の時点で、オブジェクト関数 [ko オブザーバブル ジャンク文字列] にメソッド lastName() がないというエラーが表示されます。
Message: TypeError: Object function d(){if(0<arguments.length){if(!d.equalityComparer||!d.equalityComparer(c,arguments[0]))d.H(),c=arguments[0],d.G();return this}b.r.Wa(d);return c} has no method 'lastName';
Bindings value: text: person.lastName()?person.lastName()+'###':'foo'
その person.lastName()+"##" は、一部のプロパティが空でないかどうかに応じて、プロパティ値をオプションのテキスト形式と組み合わせるために必要です。
私はこれについてのアイデアがありません。