2016-11-25 207 views
0

我有对象模型它低于格式的,淘汰赛JS:foreachBinding

models: 
    [ 
     0: { 
     [functions]: , 
     __proto__: { }, 
     Main: "Sample", 
     sub: [ 
      0: " Sub1", 
      1: " Sub2", 
      2: " sub3", 
      3: " sub4", 
      4: " sub5", 
      5: " sub6", 
      6: " sub7", 
      7: " sub8", 
      length: 8 
     ] 
     }, 
     1: { }, 
     2: { }, 

我已列出的对象作为样品的前三个元素。第一个元素也被详细阐述。我正在试图列出如下。

Main 1 
sub details 
Main 2 
sub details 

我试过了,我想不出为什么我的数据绑定不起作用。以下代码不在屏幕上显示任何内容。

  <td> 
       <ul class="tree"> 
        <li data-bind="foreach: models" > 
         <span data-bind="text: $data[$index].main"></span> 
         <ul data-bind="foreach: subDetails in models.sub"> 
          <li><span data-bind="text: $data[$index].sub"></span></li> 
         </ul> 
        </li> 
       </ul> 
      </td> 

请检查我的fiddle在这里。任何帮助,将不胜感激。

回答

1

你的fiddle有很多问题。这里是一个名单 -

  • 你已经写ko.applybindigs应该已经ko.applyBindings

  • model应该是你的视图模型的一部分,所以你需要将变量连接到您的视图模型。像var self = this; self.model = []...。声明它只是一个私人的var将不会暴露给淘汰赛的绑定,因此这是行不通的。

  • 一旦进入foreach绑定,您不需要$index来访问数组内的对象,只需通过它们的名称访问它们即可。所以<span data-bind="text: $data[$index].Main"></span><span data-bind="text: Main"></span>

  • 代替你有另一个foreach嵌套在外部一个内部的,也有已经使用$index访问这确实是没有必要的。要添加到<ul data-bind="foreach: subdetails in model.sub">可以很容易地更换<ul data-bind="foreach: Sub">(请还会注意到在sub错字应该已经Sub

更正小提琴here

+0

你不能不提到通过'var'宣布里面的东西viewmodel将无法在视图中访问。相反,它必须附加到'this'。 – connexo

+0

我已经覆盖在小提琴....仍然我更新了答案...感谢指出...... .. :) – gkb