Нокаут optionsText / optionsValue привязки не будут работать

Почему эта привязка не выполняется с исключением "значение не найдено"?

<select data-bind="options: $root.arr, optionsValue: key, optionsText: value"></select>

Данные массива параметров таковы:

ko.observableArray ([ 
  {key: 'foo', value: '1'}, 
  {key: 'bar', value: '2'}
])

Я уже решил свою собственную проблему, но проложил маршрут крошки Stackru, чтобы другие не тратили свое время впустую, как я пытался это выяснить. ;-)

1 ответ

Кавычки требуются вокруг имен свойств, используемых в optionsText и optionsValue. Как это:

<select data-bind="options: $root.arr, optionsValue: 'key', optionsText: 'value'"></select>

Я предположил, что:

  1. options Привязка создала новый контекст привязки, такой как with а также foreach делать
  2. OptionsValue и optionsText работали как text привязка, где вы можете просто указать имя свойства и КО волшебным образом связывается со свойствами

Оба предположения были неверны, как я понял после часа перебора источников нокаутов, пытаясь понять, что я делаю неправильно. Arrrrgh!

Вместо этого, если вы не используете функцию для извлечения значения или текста для каждого параметра и хотите вместо этого получить доступ к свойству, вам необходимо заключить имя свойства в кавычки. Это показано в документации, если вы внимательно прочитали пример кода. Что я не сделал.;-(

Другие вопросы по тегам