Как сделать ComboBox, где пользователь может выбрать null
?
Если вы просто создаете комбинированный список с null
в поставщике данных, значение появляется, но пользователь не может выбрать его:
<mx:ComboBox id="cb" dataProvider="{[null, 'foo', 'bar']}" />
Есть ли способ сделать этот нуль выбираемым?
Обходной путь - добавить в dataProvider элемент, который не является нулевым, но «представляет» нулевой; и затем отображать между нулем и этим объектом каждый раз, когда вы получаете доступ к списку. Но это не совсем элегантное решение; вы всегда должны помнить об этом отображении во всем коде, который обращается к «обнуляемому» списку ...
Редактировать: подробнее, почему мне не нравится обходной путь:
Конечно, это можно сделать в подклассе, но я либо ввожу новые атрибуты (например, nullableSelectedItem
); но тогда вы должны быть осторожны, чтобы всегда использовать эти атрибуты. Или я перезаписываю ComboBoxes selectedItem
; но я боюсь, что это сломает базовый класс: ему может не понравиться что-то, меняющее представление о том, что текущий выбранный элемент изнутри. И даже этот хрупкий хак работает, помимо selectedItem
и dataProvider
, этот nullItem также должен обрабатываться специальным образом в data
и listData
для средств визуализации, в labelFunction
, а затем он, вероятно, все еще отображается в события, которые отправляет ComboBox ...
Это может сработать, но это довольно хакерская задача, просто чтобы решить проблему, которая, если пользователь нажимает на элемент, он не активируется (в остальном ComboBox прекрасно обрабатывает ноль).
(Другой альтернативой является делегирование компонента пользовательского интерфейса в ComboBox, но это еще больше кода, чтобы избежать этой маленькой проблемы)