Обычно, когда у меня есть список выбора Я связываю его с нокаута, как это:Выбранный вариант Id и значение
<select
data-bind="
options: data,
optionsText: 'Name',
optionsValue: 'Id',
optionsCaption: 'Select ...',
value: dataSelectedId" ></select>
Но есть проблема с такими обязательными: у вас нет выбранного объекта. У вас есть свой идентификатор. Как слить эти два требования: иметь привязку к самому элементу и элементу элемента?
Сейчас я использую computed
наблюдаемую, чтобы получить выбранный элемент, который обычно выглядит следующим образом:
self.dataSelectedCO = ko.computed(function() {
for (var i = 0; i < self.data().length; ++i)
if (self.data()[i].Id() == self.dataSelectedId())
return self.data()[i];
});
Я попытался обернуть значение геттер, используя пользовательскую функцию, но это называется для каждого элемента при изменении выбора , поэтому здесь нет никаких преимуществ при использовании этого подхода. Here 's jsfiddle.
Я не могу сделать это таким образом, потому что тогда я не могу поместить этот SELECT в форму, которая отправляется на сервер, если я не сделаю дополнительное скрытое поле для выбранного идентификатора. Но использование скрытого поля с привязанным к нему идентификатором сделало бы это. – SOReader
Если вы хотите, чтобы Id как значение SELECT, то использование вычисленного наблюдаемого для выбранного элемента является очень хорошим подходом. – ManojRK