我有一个敲除视图模型绑定到模板,如下所示,它正确显示所有内容。 但我喜欢做的是,如果当前行文件夹与上一行的文件夹相同,那么我想把空白而不是重复相同的文件夹。 我试过像这样的数据绑定:“text:($ index()> 0?($ data [$ index() - 1] .Folder == $ data.Folder?'':$ data。文件夹):'') 但它不起作用。任何帮助将不胜感激。感谢。
<table border="1">
<script type="text/html" id="content-template">
<tr data-bind="css: { 'firstRow': $index() % 2 }">
<td><span data-bind="text: $index() + 1"></span></td>
<td><span data-bind="text: Folder"></span></td>
<td><span data-bind="text: Location"></span></td>
</tr>
</script>
</table>
<div data-bind="visible: loaded()">
<div id="data" data-bind="template: { name: 'content-template', foreach: contents }"></div>
</div>
答案 0 :(得分:2)
在viewmodel上创建一个函数来确定是否可见 - 它使测试更容易,data-bind
属性更简单:
showItem: function(index) {
if( index == 0 )
return true;
return this.contents[index - 1].Folder != this.contents[index].Folder;
}
现在将visible
属性绑定到此函数:
visible: $parent.showItem($index())
答案 1 :(得分:1)
访问foreach块中的contents数组的语法不正确:
"text: ($index() > 0 ? ($data[$index() - 1].Folder == $data.Folder ? '': $data.Folder) : '')
。
$ data是当前内容()可观察数组元素,而不是内容数组本身。要访问内容数组,您可以使用:
$parent.contents()[$index()]
并获取前一个元素,如果$ index()&gt; 0
$parent.contents()[$index()-1]