2012-03-22 59 views
1

嗨我想让隐藏的我的observableArray的第一个元素,以下似乎没有工作,任何想法?Knockout js模板,过滤可观察数组的第一个元素

数据绑定= “如不方便:$ root.typedData [0] === $数据” 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(); 
} 
+1

使读者都知道,这真的是不绑定到一个正确的方法可观察数组(它实际上并没有绑定到observable,而是对内部数组,observable通常会代理)。 – 2013-02-14 22:08:41

回答

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

太棒了!工作!感谢那。这是我第二次错过了圆括号!我会研究你提到的unwrapObservable,为额外的信息欢呼! – Mantisimo 2012-03-22 13:23:27

+1

很高兴帮助!快乐编码! – 2012-03-22 13:31:16

1

typedData是observableArray,因此比较,你会想这样做(添加()):

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

相关问题