Knockout js模板,过滤可观察数组的第一个元素

时间:2012-03-22 12:28:41

标签: javascript jquery knockout.js

您好我正在尝试隐藏我的observableArray的第一个元素,以下似乎没有工作,任何想法?

data-bind =“ifnot:$ root.typedData [0] === $ data” http://jsfiddle.net/Lx8jR/

<table border="1" style="width:90%">
    <tr>
        <td data-bind="text: typedData()[0].name"></td>
        <td data-bind="text: typedData()[0].type"></td>
    </tr>

    <tr>
        <td>
            <table data-bind="foreach: typedData()">
                <tr>
                    <td data-bind="text: name"></td>
                </tr>
            </table>            
        </td>
        <td>
            <table data-bind="foreach: typedData()">
                <tr data-bind="ifnot: $root.typedData[0]===$data">
                    <td data-bind="text: type">

                    </td>
                    <td data-bind="text: $index">
                    </td>  
                </tr>
            </table>           
        </td>        
    </tr>
</table>


var ViewModel = function() {
    var self = this;
    this.typedData = ko.observableArray([
    { name: "Bungle", type: "Bear" },
    { name: "George", type: "Hippo" },
    { name: "Zippy", type: "Unknown" }
]).indexed();
}

2 个答案:

答案 0 :(得分:2)

看起来你在那条线上错过了一个()。

ifnot: $root.typedData[0]===$data

变为

ifnot: $root.typedData()[0]===$data

http://jsfiddle.net/Lx8jR/1/

我做了几十次的一个简单错误。

如果你养成了使用ko.utils.unwrapObservable的习惯,这就变得不那么重要了。如果在不可观察的情况下使用该函数,它仍然会成功。

... ko.utils.unwrapObservable($root.typedData)[0]

作为参考,有一个article on KnockMeOut,它提出了一些有助于简化模板和绑定的其他标准。

答案 1 :(得分:1)

typedData是一个observableArray,所以在你的比较中你想做(add()):

$root.typedData()[0] === $data