选择选项模板绑定到数组的索引

时间:2011-12-08 23:57:20

标签: jquery knockout.js jquery-templates

我能够将选择列表的optionsValue绑定到索引 选项数组中的特定项目?

<select data-bind="options: options,  optionsText: 'text', 
optionsValue: ko.utils.arrayIndexOf(**somevalue**)" /> 

或者我不得不从

转换我的选项对象
{ 
    text: 'asdasd' 
} 

{ 
   text: 'asdasd', 
   id: 0 
} 

并且正在做

<select data-bind="options: options,  optionsText: 'text', 
optionsValue: 'id' /> 

谢谢

1 个答案:

答案 0 :(得分:1)

如果您是通过JSON进行通信而不是提交表单,那么您可以将所选值作为您的对象,并创建一个dependentObservable来表示它的索引,如:

function ViewModel() {
    this.choices = ko.observableArray([
        { text: "index zero" },
        { text: "index one" },
        { text: "index two" }
    ]);
    this.selectedChoice = ko.observable();
    this.selectedChoiceIndex = ko.dependentObservable(function() {
        return this.choices.indexOf(this.selectedChoice());
    }, this);
};

示例:http://jsfiddle.net/rniemeyer/hevTF/

如果您要提交表单并依赖所选选项元素的value属性,那么您可能希望将索引添加到对象中(如您所建议的那样)。另一个选项是使用{{each(item,index)}}在jQuery模板中发出选项元素,如:http://jsfiddle.net/rniemeyer/h6wLr/