Я просто хотел, чтобы опубликовать решение я использую в последнее время для решения этой проблемы вопрос. Он использует обработчики привязки (valueAppendText и textFromOption) и добавляет наблюдаемое к наблюдаемому, отслеживаемое выпадающим. Это решение не является полным, но демонстрирует идею не использовать добавление вычисленного для получения выпадающего текста. В этом решении также используется jQuery, который можно удалить, но поскольку я использую jQuery в своих проектах (в основном), я оставил его. В приведенной ниже ссылке jsFiddle демонстрируется функциональность.
Fiddle: http://jsfiddle.net/FjRxn/65/
наценки:
<select data-bind="options: availableGroups, optionsText: 'Name', optionsValue: 'GroupId', valueAppendText: selectedGroup, optionsCaption: 'Choose...'"></select>
<p>
I am visible
You have chosen <span data-bind="textFromOption: selectedGroup"></span>
<div>
Group Id: <span data-bind="text: selectedGroup"></span>
</div>
</p>
переплета Обработчики:
ko.bindingHandlers.valueAppendText = {
init: function(element, valueAccessor, allBindingsAccessor, context) {
var $element, newValueAccessor, observable, setText;
observable = valueAccessor();
observable.selectedOptionText = ko.observable(null);
newValueAccessor = function() {
return observable;
};
$element = $(element);
setText = function() {
return observable.selectedOptionText($element.find("option:selected").text());
};
setTimeout(setText, 5);
$element.change(function() {
return setText();
});
return ko.bindingHandlers.value.init(element, newValueAccessor, allBindingsAccessor, context);
},
update: function(element, valueAccessor, allBindingsAccessor, context) {
return ko.bindingHandlers.value.update(element, valueAccessor, allBindingsAccessor, context);
}
};
ko.bindingHandlers.textFromOption = {
update: function(element, valueAccessor, allBindingsAccessor, context) {
var newValueAccessor, observable;
observable = valueAccessor();
newValueAccessor = function() {
if (ko.isObservable(observable.selectedOptionText)) {
return observable.selectedOptionText();
}
return observable();
};
return ko.bindingHandlers.text.update(element, newValueAccessor, allBindingsAccessor, context);
}
};
Почему бы вам не просто использовать выпадающие текстовое значение? – DevelopmentIsMyPassion
Теперь я вижу, что я пытаюсь создать нокаут, чтобы вывести раскрывающийся список со значениями параметров, которые все установлены в поле groupid в сгенерированной разметке, что необязательно. Поэтому, даже если значения не установлены в разметке, когда я получаю выбранный элемент, я могу получить поле GroupId как часть выбранного группового объекта. – voam