2016-11-26 3 views
0

Привет, у меня есть приложение, данные которого передаются с одной страницы на другую с предопределенными объектами/массивами данных, назначенными ему, моя проблема заключается в том, что я вижу observableArray, имеющий значение, а затем он поворачивается SelectedPeople наблюдаемый до неопределенного.Перехват привязки нокаута, переписывающий мой предопределенный наблюдаемый объект

Я удалился до разметки привязки данных, как если бы я удалил, что мой наблюдаемый массив не устанавливает ничего неопределенного.

Вот как я привязываю свои наблюдаемые/наблюдаемые массивы к элементам.

<select data-bind="options: ObservableArray.People, value: ObservableArray.SelectedPeople, optionsText: 'Name'"></select> 
  • ObservableArray.People = Наблюдаемые Массив объектов - отлично работает и делает все варианты выпадающие

  • ObservableArray.SelectedPeople = Observable

Оба объекта 'Название', определенные в соответствии optionsText. Он отлично работает при выборе данных с нуля, но когда я пытаюсь установить в нем предопределенные данные, объект Observable.SelectedPeople продолжает получать отправленный как undefined, когда он пытается загрузить.

В основном у моего Observable.SelectedPeople есть объект, на котором должно быть предопределено значение этого выбора, а объект 100% соответствует одному из выпадающих меню ObservableArray.People. Мне нужно не устанавливать Observable.SelectedPeople в undefined и заполнять поле выбора.

Может ли кто-нибудь понять, почему это происходит.

Благодаря

+0

Вы должны проверить значение, которое присваивается в 'Observable. SelectedPeople' после выбора значения из раскрывающегося списка. Это значение должно быть «свойством», определенным в объектах, связанных с выпадающим списком. Вы должны нажать значение этого свойства в 'Observable.SelectedPeople'. – gkb

+0

Observable.SelectedPeople имеет значение по умолчанию, которое должно заполнить Observable.People тем, который установлен[email protected] – user4058171

+0

Посмотрите это сообщение и посмотрите, как атрибут 'optionsValue' использовался в элементе управления select http://stackoverflow.com/questions/13587230/knockout-bind-a-key-value-object-to-dropdown – gkb

ответ

1

... и объект 100% соответствует одному из раскрывающихся ObservableArray.People опций.

Эта линия заставляет меня с подозрением, используете ли вы реальную ссылку на объект, или просто объект, который похож.

Например, это не работы:

var options = [{ id: 1 }, { id: 2 }, { id: 3}]; 
var selectedOption = ko.observable({ id: 1 }); 

Нокаут не выполняет какую-то deepEquals сравнения; если он видит не примитивный, он выполняет контрольную проверку. options[0] !== { id: 1 }, поэтому этот первоначальный выбор нет действительный.

Код ниже будет работать, потому что вы используете реальный объект из массива вы используете в своем выберите элемент:

var options = [{ id: 1 }, { id: 2 }, { id: 3}]; 
var selectedOption = ko.observable(options[0]); 
Смежные вопросы