Knockout.js 敲除JS中一个foreach循环中的两个数组绑定

Knockout.js 敲除JS中一个foreach循环中的两个数组绑定,knockout.js,Knockout.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'

请查看下面的“我的视图”模型:

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结构显示评论。评论按预期显示。但是我怎样才能把
老师的名字
和那篇评论放在一起呢?我已经把
教师名称[$index]
放进去了,但它不起作用

注1:两个数组中的元素数(即评论和教师姓名)将相同

注意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>   

  • 123

请检查此项。

您的属性称为TeacherName,但您将其称为TeacherName

此外,它位于父对象上,因此请尝试:

data-bind="text:$parent.TeacherNames[$index()]"
编辑: 范围(上下文)是错误的。您可以使用$parent或$root访问教师姓名

更改:

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

123

这样想:
$index
是可观察的,而
$index()
是可观察的值。您需要为TeacherNames数组提供数字,而不是可观察的

使用

123

而不是

123

访问值
$index()

我复制了你的照片


另外,感谢您,他刚刚用这个示例以不同的格式帮助我回答了同一个问题。

RoyalleBlue在使用
foreach
绑定时的回答是正确的。但使用我的绑定将使绑定代码更清晰:

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

谢谢,我编辑了酒店名称。但仍然不起作用,请帮助。下面是我得到的错误:错误:无法解析绑定。消息:ReferenceError:未定义教师名称;绑定值:text:TeacherNames[$index]。我也试着在下面绑定:data bind=“text:$parent.TeacherNames[$index]”。在本例中,它没有显示任何错误,只是没有按预期显示数据。正如我在上面的评论中提到的,我也尝试过:data bind=“text:$parent.TeacherNames[$index]”,它没有显示任何错误,它只是没有按预期显示数据。这个答案忽略了一个事实,
$index
是可观察的。这个解决方案按预期工作,但我想@RoyalleBlue在基本实现方式方面有更好的解决方案。谢谢你的帮助。:-)这个答案忽略了一个事实,
$index
是可观察的。
<ul>
  <li data-bind="repeat:Reviews.length">
    <a href="#" data-bind="text:Reviews[$index]"></a>
    <span data-bind="text:TeacherNames[$index]"></span>
  </li>
</ul>