如何访问knockout.js模板中项目的索引
在下面tbody中的模板中,如何访问正在呈现的项的索引如何访问knockout.js模板中项目的索引,knockout.js,Knockout.js,在下面tbody中的模板中,如何访问正在呈现的项的索引 <table> <tbody data-bind="foreach:contacts"> <tr class="contactRow" valign="top"> <td><a href="#" data-bind="click: function(){viewModel.removeContact($data)}">
<table>
<tbody data-bind="foreach:contacts">
<tr class="contactRow" valign="top">
<td><a href="#" data-bind="click: function(){viewModel.removeContact($data)}">Delete</td>
<td><input data-bind="value: FirstName" name="Contacts[].FirstName"/></td>
<td><input data-bind="value: LastName" name= "Contacts[].LastName" /></td>
<td><input data-bind="value: Username" name="Contacts[].Username"/></td>
<td><input data-bind="value: Email" name="Contacts[].Email"/></td>
</tr>
</tbody>
<thead>
<tr>
<th>Controls</th>
<th>First Name</th>
<th>Last Name</th>
<th>Username</th>
<th>Email</th>
</tr>
</thead>
</table>
删除
控制
名字
姓
用户名
电子邮件
更新:$index
现已在KO 2.1中提供
目前,在foreach
中没有直接访问索引的方法。这里有一个pull请求,用于在此处添加$index
变量:
我在过去使用过的一个选项是对observableArray使用手动订阅,以保持索引同步
它的工作原理如下:
//attach index to items whenever array changes
viewModel.tasks.subscribe(function() {
var tasks = this.tasks();
for (var i = 0, j = tasks.length; i < j; i++) {
var task = tasks[i];
if (!task.index) {
task.index = ko.observable(i);
} else {
task.index(i);
}
}
}, viewModel);
//每当数组更改时,将索引附加到项
viewModel.tasks.subscribe(函数(){
var tasks=this.tasks();
for(var i=0,j=tasks.length;i
下面是一个示例:我正在这样做,它运行得非常好。不是最漂亮的,但能让一切井然有序: 使用attr:binding设置字段的name属性,然后使用
$parent.CallForwards.indexOf($data)
获取你的索引
data-bind="value: Name, attr: {name: 'CallForwards[' + $parent.CallForwards.indexOf($data) + '].Name'}"
我相信使用KO2.1会更容易:您可以在foreach循环中使用$index来引用当前索引
文档:+1。这正是我所寻找的解决IE7/8中缺少第n个孩子(甚至)的方法,我认为这是干净的和不错的!这不仅干净漂亮,还允许我们在深层访问索引。如果集合包含重复数据,这是否有效?我建议使用$index,我认为这个答案是在$index存在之前给出的;在以后的KO版本中,使用$index可能是首选的路由。不幸的是,它只适用于foreach循环。我已经用knockout sortable尝试过了,但是索引没有暴露在那里。我在下面使用朗讯的答案。