Ответ 1
Вы не можете заставить обе привязки optionsValue
и value
указывать на разные объекты, но вы можете создать простую обходную процедуру.
Чтобы получить форму, чтобы отправить простое значение, используйте optionsValue
чтобы указать на свойство связанного элемента, которое вы хотите разместить в форме. Затем присвойте привязку value
наблюдаемому. Наконец, создайте computed
для автоматического поиска и возврата правильного объекта при изменении выбранного значения.
Примеры привязок:
<select data-bind="options: options,
optionsText: 'name',
optionsValue: 'id',
value: selectedOptionId"></select>
<br/>
<br/>
Selection Option Object : <span data-bind="text: selectedOption"></span><br/>
Selection Option name : <span data-bind="text: selectedOption().name"></span><br/>
Selection Option id : <span data-bind="text: selectedOption().id"></span><br/>
и модель просмотра:
var optionModel = function(id,name){
var self = this;
self.id = id;
self.name = name;
}
var viewModel = function(){
var self = this;
self.options = [
new optionModel(1,"First"),
new optionModel(2,"Second")
];
self.selectedOptionId = ko.observable(self.options[0].id);
self.selectedOption = ko.computed(function(){
return ko.utils.arrayFirst(self.options, function(item){
return item.id === self.selectedOptionId();
});
});
}
ko.applyBindings(new viewModel());
Я разместил это в jsFiddle здесь.
Надеюсь это поможет!