выбрать опцию привязки шаблона к индексу массива - PullRequest
0 голосов
/ 09 декабря 2011

Могу ли я связать optionsValue списка выбора с индексом определенного элемента в массиве option?

<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 Ответ

1 голос
/ 09 декабря 2011

Если вы общаетесь через JSON, а не отправляете форму, тогда вы можете иметь выбранное значение в качестве вашего объекта и создать зависимый объект, который будет представлять его индекс, например:

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/

Если вы отправляете форму и полагаетесь на атрибут значения выбранного элемента option, то вы захотите добавить индекс к своему объекту (как вы предлагали). Другой вариант - генерировать элементы option в шаблоне jQuery, используя {{each (item, index)}}, например: http://jsfiddle.net/rniemeyer/h6wLr/

...