How to access the index of an item in knockout.js template

前端 未结 3 1244
悲哀的现实
悲哀的现实 2021-02-05 11:17

Within my template in tbody below, how can I access the index of the item being rendered?

相关标签:
3条回答
  • 2021-02-05 11:28

    I believe it gets easier with KO 2.1: you can use $index in the foreach loop to refer to the current index.

    https://github.com/downloads/SteveSanderson/knockout/knockout-2.1.0.js

    documentation: http://knockoutjs.com/documentation/binding-context.html

    0 讨论(0)
  • 2021-02-05 11:36

    Update: $index is now available in KO 2.1.

    Currently, there is not a way to directly access the index in a foreach. There is a pull request that looks at adding a $index variable here: https://github.com/SteveSanderson/knockout/pull/182

    An option that I have used in the past is to use a manual subscription against an observableArray that keeps an index observable in sync.

    It works like:

    //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);
    

    Here is a sample: http://jsfiddle.net/rniemeyer/CXBFN/

    0 讨论(0)
  • 2021-02-05 11:48

    I'm doing this and it's working pretty well. Not the best looking, but keeps everything in order:

    Use the attr: binding to set the name attribute of your field and then use $parent.CallForwards.indexOf($data) to get your index.

    data-bind="value: Name, attr: {name: 'CallForwards[' + $parent.CallForwards.indexOf($data) + '].Name'}"
    
    0 讨论(0)
提交回复
热议问题