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>