Indexing KnockoutJS:从JavaScript模板中访问数组中项的索引

Indexing KnockoutJS:从JavaScript模板中访问数组中项的索引,indexing,knockout.js,ko.observablearray,Indexing,Knockout.js,Ko.observablearray,我使用KnockoutJS从数组填充列表: <div data-bind:"foreach: list"> <input type="text" data-bind="value: myText" /> </div> function ViewModel() { self.list = ko.observableArray([ new listItem("sample text") ]); }; function li

我使用KnockoutJS从数组填充列表:

<div data-bind:"foreach: list">
   <input type="text" data-bind="value: myText" />
</div>

function ViewModel() {
    self.list = ko.observableArray([
        new listItem("sample text")
    ]);
};

function listItem (text) {
    this.myText = text;
};

为了将其用于进一步处理。

您可以创建一个自定义绑定,将您的属性设置为索引,它看起来像:

ko.bindingHandlers.setIndex = {
    init: function(element, valueAccessor, allBindings, data, context) {
        var prop = valueAccessor();
        data[prop] = context.$index;
    }        
};
这假设您正在处理数组中的对象。你会像这样使用它:

<ul data-bind="foreach: items">
    <li data-bind="setIndex: 'myIndex', text: name"></li>
</ul>
this.myItems = ko.observableArray().indexed('myIndexProp');
然后,您可以像这样使用它:

<ul data-bind="foreach: items">
    <li data-bind="setIndex: 'myIndex', text: name"></li>
</ul>
this.myItems = ko.observableArray().indexed('myIndexProp');

下面是一个示例:

非常感谢您的及时和详细的回答,尤其是JSFIDLLES!在使用自定义绑定尝试第一个选项时,我注意到数据绑定可以访问“myIndex”,但在数组初始填充期间,我无法在列表项的javascript模板中访问它。任何关于为什么会出现这种情况的指针?在这种情况下,在应用绑定之前,索引不会被设置到对象上。因此,在应用绑定之前运行的任何代码都不会有可用的绑定。如果你在那之前需要它,那么你可能想考虑另一个选择。谢谢。目前,第一个选项应该可以,但如果需要提前访问,我会记住这一点。
this.myItems = ko.observableArray().indexed('myIndexProp');