Knockout.JS でネストされたバインドに問題があります
たとえば、app.js ファイルに次のようなものがあるとします。
var UserModel = function() {
this.writeups = ko.observableArray([]);
}
var WriteupModel = function() {
this.type = 'some type';
}
var MyViewModel = function() {
this.newUser = new UserModel();
this.selectedUser = ko.observable(this.newUser);
this.selectedUser().writeups().push(new WriteupModel());
}
ko.applyBindings(new MyViewModel());
ビューの場合は次のとおりです。
<div id="empReportView" data-bind="template: { name: 'empTmpl', data: selectedUser }"></div>
<script type="text/html" id="empTmpl">
<table>
<tbody data-bind="template: { name: 'empWuItem', foreach: $data.writeups } ">
</tbody>
</table>
</script>
<script type="text/html" id="empWuItem">
<tr>
<td data-bind="text: type"></td>
</tr>
</script>
selectedUser に属する writeups 配列に別の WriteupModel がプッシュされるたびに、テーブルは更新されません。これは私が達成しようとしているものの単純化されたバージョンですが、記事を作成するときに、新しい情報に基づいて記事テーブルを更新する必要があると想定されます。
私はノックアウトが初めてなので、助けていただければ幸いです!
ありがとう。
-=-= 編集 1 =-=-
注意すべきことの 1 つは、selectedUser のバインディングをリロードすると、追加された書き込みの empWuItem テンプレートが吐き出されることです。ビューモデルでselectedUserプロパティを「再割り当て」する必要なく、UserModelのwriteupsオブザーバブル配列にWriteUpが追加されたときにバインディングがトリガーされるため、これは非効率的です。