我有一个带有两个模板的数据表:默认查看并在选中项目时进行编辑。我很难弄清楚如何从 KO 的模板切换到 Durandal 的 compose。这是我当前的设置:
看法
<table>
<tbody data-bind="foreach: { data: items }">
<tr>
<td data-bind="template: {name: $root.itemTemplates}"></td>
<td class="options">
<ul>
<li><a data-bind="click: edit">Edit...</a></li>
</ul>
</td>
</tr>
</tbody>
</table>
<script id="viewTemplate" type="text/html">
<a href="" data-bind="text: name"></a>
</script>
<script id="editTemplate" type="text/html">
<form class="edit" data-bind="submit: $root.save">
<input type="text" name="name" data-bind="value: name, event: { keyup: $root.cancelEdit }" />
</form>
</script>
视图模型
self.selectedItem = ko.observable();
self.edit = function(item) {
self.selectedItem(item);
}
self.itemTemplates = function(item) {
return self.selectedItem() === item ? 'editTemplate' : 'viewTemplate';
}
现在我尝试通过 using 切换到 compose <td data-bind="compose: itemTemplates()"></td>
,但我注意到我的itemTemplates
函数停止正常工作,因为它为item
参数返回 undefined。我还注意到,当我edit
现在点击时,它会重新绑定列表中的每个项目,导致所有项目都切换模板,而不仅仅是我选择的模板。
有任何想法吗?