Я пытаюсь написать немного пользовательского интерфейса, который позволяет пользователю либо вводить число через текстовое поле, либо выбирать вариант из раскрывающегося списка.
Я сделал упрощенный jsFiddle по адресу http://jsfiddle.net/unklefolk/PNQeR/2/
Как вы видете:
- Когда выбрано «Число», вы можете ввести текст в текстовое поле.
- Когда выбрано «Параметр», вы можете выбрать один из двух вариантов в раскрывающемся списке.
Текстовое поле и раскрывающийся список ОБА привязаны к свойству ItemValue
элемента в viewModel
. Хотя код работает, я получаю ошибки. Если вы запустите окно отладки в Chrome, при изменении первого раскрывающегося списка вы получите сообщение об ошибке:
Uncaught TypeError: объект 0 не имеет метода «ItemName»
Я считаю, что это происходит в ItemText
dependableObservable (также известном как вычисляемый).
this.ItemText = ko.dependentObservable(function () {
return _isItemAConstant() === 'true' ? this.ItemValue() : this.ItemValue().ItemName();
}, this);
Очевидно, что функция ItemName()
вызывается для числового значения '0', вызывая ошибку.
Что я могу сделать, чтобы эта ошибка не возникала? Является ли мой дизайн привязки двух элементов управления к одному и тому же наблюдаемому фундаментальной ошибкой?