При использовании плагина сопоставления KO для модели представления, а затем привязки к выбору, значение не задано.Отображение нокаута, по-видимому, прерывает привязку значения для выпадающего списка
jsFiddle:
http://jsfiddle.net/JerryClinesmith/pCn9E/
HTML:
<h1>With ko.mapping (manager not set)</h1>
<div id="option-mapping">
<select data-bind="options: availManagers, value: manager, optionsText: 'name', optionsCaption: 'Pick one'"></select>
<div data-bind="text: json"></div>
</div>
<h1>Without ko.mapping (manager is set)</h1>
<div id="option-no-mapping">
<select data-bind="options: availManagers, value: manager, optionsText: 'name', optionsCaption: 'Pick one'"></select>
<div data-bind="text: json"></div>
</div>
JavaScript:
var origData = {
manager: {},
availManagers: [
{id: 1, name: 'Tom'},
{id: 2, name: 'Joe'},
{id: 3, name: 'James'}]
};
var ViewModel = function(data) {
var self = this;
ko.mapping.fromJS(data, {}, self);
self.json = ko.computed(function() {
return ko.toJSON(ko.mapping.toJS(self));
});
};
var ViewModelNoMapping = function(data) {
var self = this;
self.manager = ko.observable(data.manager);
self.availManagers = ko.observableArray(data.availManagers);
self.json = ko.computed(function() {
var obj = ko.toJS(self);
delete obj.json;
return ko.toJSON(obj);
});
};
var vm = new ViewModel(origData);
var vm2 = new ViewModelNoMapping(origData);
ko.applyBindings(vm, document.getElementById('option-mapping'));
ko.applyBindings(vm2, document.getElementById('option-no-mapping'));
Модель просмотра без плагина сопоставления работает нормально.
Вы правы - переключение на «» или нуль, как начальное значение управляющего говорит отображение для создания наблюдаемого для него. Это может быть ошибкой ... Что определенно похоже на ошибку, так это то, что ko.mapping.toJS не включает менеджера, даже если он, похоже, отслеживает его. Новая скрипка: http://jsfiddle.net/JerryClinesmith/hsx7P/ –
https://github.com/SteveSanderson/knockout.mapping/issues/79 –
https://github.com/SteveSanderson/knockout.mapping/issues/ 80 –