1

我正在使用 KnockoutJS 来呈现 JSON。某些结果有超过 1 个“应用程序”。是否可以在 foreach 中使其始终只返回 1 ?无论哪个先来。

在下面的示例中,TEST1 在 Applications 下有 2 个结果。我只想在渲染中显示一个。

HTML

<table>
<thead>
<tr>
<th>AppId</th>
<th>Name</th>
<th>App Token</th>

</tr>
</thead>
<tbody data-bind="foreach: { data: APPS, as: 'APP' }">
  <tr data-bind="foreach:  Applications">
    <td><span data-bind="text: appId"></span></td>
    <td><span data-bind="text: $parent.name"></span></td>
    <td><span data-bind="text: AppToken"></span>
  </tr>
</tbody>
</table>

JSON

{
   "APPS":{
      "bad":{
         "Name":"TEST1",
         "Applications":[
            {
               "AppId":"bab",
               "AppToken":null
            },
            {
               "AppId":"bab",
               "AppToken":null
            }
         ]
      },
      "good":{
         "Name":"TEST2",
         "Applications":[
            {
               "AppId":"bab",
               "AppToken":null
            }
         ]
      }
   }
}
4

2 回答 2

4

APPS 不是一个数组,所以你不能循环遍历它。应用程序是,您可以循环通过它。但是由于您希望它成为第一项,因此只需对 APPS 和应用程序使用 With 绑定即可。

此外,更正 HTML 中绑定的大小写。另一件事,Applications 数组不属于“Apps”的“好”或“坏”属性,因此您必须对其进行限定。

这是相同的小提琴。

http://jsfiddle.net/sujesharukil/tyJwX/1

<tbody data-bind="with: APPS.bad">
    <tr data-bind="with:  Applications[0]">
        <td><span data-bind="text: AppId"></span></td>
        <td><span data-bind="text: $parent.Name"></span></td>
        <td><span data-bind="text: AppToken"></span></td>
  </tr>
</tbody>
于 2013-03-15T18:29:37.043 回答
0

好的,我用过:

<!-- ko if: $index() === 0 -->

Got answer from here. knockout.js using $index with if binding

于 2013-03-15T18:38:35.687 回答