テーブルがあるとしましょう:
<table>
<tr class="expandable">
<td><button>Expand</button></td>
<td>Parent information #1</td>
<td>Parent information #2</td>
</tr>
<tr class="expandable">
<td><button>Expand</button></td>
<td>Parent information #1</td>
<td>Parent information #2</td>
</tr>
</table>
ノックアウト テンプレートがあります。
<script type="text/html" id="child-template">
<!-- ko foreach: children -->
<tr>
<td></td>
<td>Child information #1</td>
<td>Child information #2</td>
</tr>
<!-- /ko -->
</script>
そしていくつかのjavascript
$('button').click(function() {
$.getJSON(url, function(items) {
var template = $('#child-template').html();
$(this).closest('tr').after(template);
var viewModel = { children: ko.observableArray(items) };
ko.applyBindings(viewModel);
});
});
私が欲しいのは、親行を含むテーブルです。親行をクリックすると、ajax を介してその子が呼び出されます。子を取得したら、親行の下にあるすべての子のテーブルを表示したいと思います。
上記のコードの問題は、バインディングをページ全体に適用することです。私が本当に欲しいのは、そのビュー モデルをその親行にのみバインドすることです。最初に親行 #1 をクリックすると、正しい子が表示されますが、親行 #2 をクリックすると、両方の子リストに同じアイテムが含まれます。
JSFiddle で問題を視覚化しました: http://jsfiddle.net/6ehfb/1/
最初に親行 #1 で [展開] をクリックすると、子アイテム #1 が表示されます。親行 #2 で [展開] をクリックすると、両方の子リストに同じアイテムが含まれます。親行 #2 を展開する場合、親行 #1 の子は影響を受けません。
直し方?