【发布时间】:2013-07-26 06:35:57
【问题描述】:
我有一个包含两个模板的数据表:默认情况下是 view,如果项目被选中则 edit。我很难弄清楚如何从 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';
}
现在我尝试使用<td data-bind="compose: itemTemplates()"></td> 切换到撰写,但我注意到我的itemTemplates 函数停止正常工作,因为它为item 参数返回未定义。我还注意到,当我现在点击edit 时,它会重新绑定列表中的每个项目,导致所有项目都切换模板,而不仅仅是我选择的那个。
有什么想法吗?
【问题讨论】:
标签: knockout.js durandal