2013-05-13 77 views
4

在一個foreach循環淘汰賽結合請看看下面我的視圖模型:兩個陣列JS

viewModel = [ 
{ 
    StudentName : 'Ronald', 
    Reviews : [ '3/5', '2/5', '4/5'], 
    TeacherNames : [ 'Nema', 'Sarah', 'Vilson'] 
    }, 
{ 
    StudentName : 'Chris', 
    Reviews : [ '4.5/5', '2.5/5', '3.5/5'], 
    TeacherNames : [ 'Nema', 'Sarah', 'Vilson'] 
} 
] 

在下面HTML我想顯示在嵌套的foreach結構評價。評論按照期望顯示。但是我怎樣才能將TeacherNames與單一評論一起放置?我已經把TeacherNames[$index],但它不起作用。

注1:數組中的元素數量(即Reviews和TeacherNames)將相同。

注2:我不想改變這個JSON模型的結構,就像放置額外的變量並將兩個參數放在一個數組中。

<div data-bind="foreach:viewModel"> 
    <span data-bind="text: StudentName"></span> 
    <ul data-bind="foreach:Reviews"> 
     <li> 
     <a href="#" data-bind="text:$data">Inbox </a> 
     <span class="ui-li-count" data-bind="text:TeacherNames[$index]">123</span> 
     </li> 
    </ul> 
</div> 

請檢查這個Fiddle

回答

2

認爲它是這樣的:$index是可觀的,並且$index()是可觀察的價值。您需要給TeacherNames數組賦予數字,而不是可觀察數。

使用

<span data-bind="text:$parent.TeacherNames[$index()]" >123</span>

代替

<span data-bind="text:$parent.TeacherNames[$index]" >123</span>

訪問值$index()

我製作了fiddle with the changes applied的副本。

另外,非常感謝Calvin,他們只是用這個例子來幫助我以不同格式的相同問題。

+1

謝謝,這對我來說很有魅力。 :-) – 2013-06-11 11:56:33

1

你的屬性被稱爲TeacherNames,但你在呼喚它TeacherName。

而且,它是父對象,所以嘗試:

data-bind="text:$parent.TeacherNames[$index()]" 
+0

謝謝,我編輯的屬性名稱。它仍然不起作用,請幫助。 – 2013-05-13 13:30:06

+0

你得到的錯誤究竟是什麼? – 2013-05-13 13:33:25

+0

錯誤以下錯誤: 錯誤:無法解析綁定。 消息:ReferenceError:TeacherNames未定義; 綁定值:text:TeacherNames [$ index]。 我試過下面的綁定也是: data-bind =「text:$ parent.TeacherNames [$ index]」。 在這種情況下,它不顯示任何錯誤,它只是不按預期顯示數據。 – 2013-05-13 13:44:29

-1

編輯: 範圍(上下文)是錯誤的。您可以使用$ parent或$ root訪問TeacherNames。

更改:

<span data-bind="text:TeacherNames[$index()]" >123</span> 

要:

<span data-bind="text:$parent.TeacherNames[$index()]" >123</span> 

http://jsfiddle.net/calvinslusarski/7xuKX/2/

+0

這個答案錯過了'$ index'是可觀察的事實。 – 2013-06-12 19:54:39

2

RoyalleBlue的回答在使用foreach綁定時是正確的。但是用我Repeat結合將使你的綁定代碼更清潔:

<ul> 
    <li data-bind="repeat:Reviews.length"> 
    <a href="#" data-bind="text:Reviews[$index]"></a> 
    <span data-bind="text:TeacherNames[$index]"></span> 
    </li> 
</ul> 

http://jsfiddle.net/mbest/p2kHU/

+0

此解決方案按預期工作,但我猜@RoyalleBlue在基本的實現方式方面有更好的解決方案。感謝幫助。 :-) – 2013-06-11 11:59:08