Javascript 如何使用KnockoutJS在foreach循环中指定不同的click绑定

Javascript 如何使用KnockoutJS在foreach循环中指定不同的click绑定,javascript,knockout.js,Javascript,Knockout.js,我有一个击倒可观察数组的形式: this.controls = ko.observableArray([ { name: 'Previous', action: '$root.previous' }, { name: 'Next' , action: '$root.next' }, {

我有一个击倒可观察数组的形式:

this.controls = ko.observableArray([
        { 
            name: 'Previous',
            action: '$root.previous'
        },
        { 
            name: 'Next'          ,     
            action: '$root.next'
        },
        { 
            name: 'Save',
            action: '$root.save'
        }
]);
在我看来,我想做以下几点:

<div class="controls navigation">
    <ul data-bind="foreach: $root.controls">
        <li>
            <span data-bind="text: name, click: action"></span>
        </li>
    </ul>
</div>

该视图创建了三个独立的跨度,它们基本上是按钮。我的目标是让viewmodel中的相应操作在用户每次单击特定范围时调用

然而,这是行不通的

我如何在数组中循环并为每个项目指定不同的单击绑定操作


我可以很容易地写出每个跨度个体(在这个特定的例子中,因为数组中只有3个项目),但我很好奇如何使用数组来实现这一点。

也许您可以这样重构它

this.controls = ko.observableArray([
        { 
            name: 'Previous'
        },
        { 
            name: 'Next'     
        },
        { 
            name: 'Save'
        }
]);
this.myAction = function (value, event) {
    if(value == 'Previous')
    {
       // do stuff
    }
    else if(value == 'Next')
    {
       // do stuff
    }
    else if(value == 'Save')
    {
       // do stuff
    }
    return true;
}
然后



你非常接近。假设有如下定义的“上一个”、“下一个”和“保存”

this.previous = function() { ... };
self = this;
假设你这样定义自己

this.previous = function() { ... };
self = this;
然后,您只需按如下方式更新阵列:

this.controls = ko.observableArray([
    { 
        name: 'Previous',
        action: self.previous
    },
    { 
        name: 'Next',     
        action: self.next
    },
    { 
        name: 'Save',
        action: self.save
    }
]);
请注意,action如何不再是字符串,而是对函数的引用


是的!成功了。我之前也尝试过类似的方法(但是我没有使用
self
,而是在ObservalArray函数中使用了
this
。感谢您的帮助!!!