Knockout.js knockoutjs比较当前行元素和前一行元素

Knockout.js knockoutjs比较当前行元素和前一行元素,knockout.js,Knockout.js,我有一个knockout viewmodel绑定到模板,如下所示,它正确显示了所有内容。 但我想做的是,如果当前行的文件夹与前一行的文件夹相同,那么我希望将其置为空白,而不是重复相同的文件夹。 我尝试过这样的数据绑定:“文本:($index()>0?($data[$index()-1]。文件夹==$data.Folder?“”:$data.Folder:“”) 但它不起作用。任何帮助都将不胜感激。谢谢 <table border="1"> <script typ

我有一个knockout viewmodel绑定到模板,如下所示,它正确显示了所有内容。 但我想做的是,如果当前行的文件夹与前一行的文件夹相同,那么我希望将其置为空白,而不是重复相同的文件夹。 我尝试过这样的数据绑定:“文本:($index()>0?($data[$index()-1]。文件夹==$data.Folder?“”:$data.Folder:“”) 但它不起作用。任何帮助都将不胜感激。谢谢

<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>

在viewmodel上创建一个函数,用于确定是否可见,这使得测试更容易,并且您的
数据绑定
属性更简单:

showItem: function(index) {
    if( index == 0 )
        return true;

    return this.contents[index - 1].Folder != this.contents[index].Folder;
}
现在将
visible
属性绑定到此函数:

visible: $parent.showItem($index())

下面是一个。

在viewmodel上创建一个函数来确定是否可见--它使测试更容易,并且您的
数据绑定
属性更简单:

showItem: function(index) {
    if( index == 0 )
        return true;

    return this.contents[index - 1].Folder != this.contents[index].Folder;
}
现在将
visible
属性绑定到此函数:

visible: $parent.showItem($index())

这里有一个问题。

您访问foreach块中的内容数组的语法不正确:

“文本:($index()>0?($data[$index()-1]。文件夹==$data.Folder?“”:$data.Folder:“”)

$data是当前contents()可观察数组元素,而不是contents数组本身。要访问内容数组,您可以使用:

$parent.contents()[$index()]
如果$index()>0,则获取上一个元素


访问foreach块中的内容数组的语法不正确:

“文本:($index()>0?($data[$index()-1]。文件夹==$data.Folder?“”:$data.Folder:“”)

$data是当前contents()可观察数组元素,而不是contents数组本身。要访问contents数组,可以使用:

$parent.contents()[$index()]
如果$index()>0,则获取上一个元素


假设内容是一个可观察的数组,则上面的代码应该在每次出现的内容后追加()项。例如,“returnthis.contents()[index-1]。Folder!”this.contents()[index]。文件夹;“@ChuckSchneider,正确,如果'contents'是一个可观察数组。在我的示例中,为了简单起见,我只使用了一个规则数组(原始问题没有指出是否使用了可观察数组)。假设内容是一个可观察数组,则上面的代码应该在每次出现的内容后都附加()。例如,“return this.contents()[index-1].Folder!=this.contents()[index].Folder;“@ChuckSchneider,正确,如果‘contents’是一个可观察数组。在我的示例中,为了简单起见,我只使用了一个规则数组(原始问题没有指出是否使用了可观察数组)。是的,内容被声明为一个可观察数组。是的,内容被声明为一个可观察数组。