2013-03-15 67 views
1

我正在使用KnockoutJS來渲染JSON。某些結果有超過1個「應用程序」。是否有可能使它在foreach中只能始終返回1?無論誰先來。KnockoutJS foreach循環來限制第一個數組

在下面的示例中,TEST1在應用程序下有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 
      } 
     ] 
     } 
    } 
} 
+0

也許類似'data-bind =「with:Applications [0]」'而不是'foreach'? – jonhopkins 2013-03-15 17:05:02

+0

試過了,但似乎沒有工作。 :-( – 2013-03-15 18:19:11

+0

您是否收到錯誤信息? – jonhopkins 2013-03-15 18:20:56

回答

4

APPS是不是數組,這樣你就可以不通過它循環。應用程序是,你可以循環它。但是既然你希望它成爲第一個項目,那麼只需使用With綁定即可應用APPS和應用程序。

此外,更正您的HTML中綁定的情況。另一件事,應用程序陣列不屬於「應用程序」的「好」或「壞」屬性,所以您必須按照這樣的條件對其進行限定。

這是一個相同的小提琴。

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

只有第一個綁定('AppId')在您的小提琴中工作。您能更新小提琴嗎? – jonhopkins 2013-03-15 18:51:14

+0

已更新:http://jsfiddle.net/ sujesharukil/tyJwX/1/ – 2013-03-15 20:02:24

+0

我想知道爲什麼這種改變會產生變化,看起來像兩個版本應該做同樣的事情,但+1使它工作 – jonhopkins 2013-03-15 20:06:14

0

好吧,我用:

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

得到的答案從這裏開始。 knockout.js using $index with if binding

+0

不這樣做。您仍將循環瀏覽整個應用程序。如果你已經說了幾百個,你會循環,爲每一個項目做一個條件檢查。相反,只需使用data-bind =「with:bad.Applications [0]」 – 2013-03-15 18:42:08

+0

這實際上是我最後的手段建議,如果你無法使用'with'綁定工作。但是@SujeshArukil剛剛指出,這確實是一個*最後的手段* – jonhopkins 2013-03-15 18:43:22