如何访问knockout.js模板中项目的索引

如何访问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)}">

在下面tbody中的模板中,如何访问正在呈现的项的索引

<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尝试过了,但是索引没有暴露在那里。我在下面使用朗讯的答案。