【发布时间】:2015-05-07 10:30:29
【问题描述】:
我使用 jsViews 创建了一个表格/网格。每行都有一个编辑按钮,单击该按钮会选择该行并显示输入控件而不是文本值。
如果我使用 data-link="visible{:#parent.parent.data.selectedIndex!==#index}" 显示/隐藏输入,那么它工作正常。
但是,我尝试了一种不同的方法,使用 {^{if #parent.parent.data.selectedIndex===#index}}...{{else}}...{{/if}} 来显示/隐藏输入,当我的数据对象上的 selectedIndex 发生更改时,这不起作用。
我也尝试过使用{^{if ~root.selectedIndex===#index}},但这也没有用。 {{if}} 可以做到这一点吗?我之所以在第一种可行的方法上进行尝试,是为了避免渲染大量无论如何都会被隐藏的选择框。
我的数据对象如下所示:
app = {
data: [...],
selectedIndex: null,
select: function select(index) {
if (this.selectedIndex !== index) {
$.observable(this).setProperty("selectedIndex", index);
}
}
};
我这样链接模板:
$.templates("#myTemplate").link("#divHolder", app)
.on("click", ".data .editButton", function() {
app.select($.view(this).index);
})
.on("click", ".data .saveButton", function() {
// save details
})
.on("click", ".transmittals .cancelButton", function() {
// reset values
app.select(null);
});
我的模板是这样的:
<script id="myTemplate" type="text/x-jsrender">
<table id="tblData" class="data">
<thead>
<tr>
<th></th>
<th>A</th>
<th>B</th>
<th>C</th>
</tr>
</thead>
<tbody>
{^{for data}}
<tr class="item">
<td>
{{if #parent.parent.data.selectedIndex===#index}}
<span class="editItem">
<button class="cancelButton">Cancel</button></span>
{{else}}
<span class="viewItem">
<button class="editButton">Edit</button></span>
{{/if}}
</td>
<td>
{^{if #parent.parent.data.selectedIndex===#index}}
<span class="editItem"><input type="text" data-link="B" /></span>
{{else}}
<span class="viewItem" data-link="B"></span>
{{/if}}
</td>
<td>
{^{if #parent.parent.data.selectedIndex===#index}}
<span class="editItem"><input type="text" data-link="C" /></span>
{{else}}
<span class="viewItem" data-link="C"></span>
{{/if}}
</td>
</tr>
{{/for}}
</tbody>
</table>
</script>
【问题讨论】:
标签: javascript jquery jsviews