Механизм меток / данных в "OO.ui.ComboBoxInputWidget"
OOjs UI's OO.ui.ComboBoxInputWidget
позволяет установить массивOO.ui.MenuOptionWidget
объекты в его menu.items
поле конфигурации. Такой предмет может иметь label
и data
поле. data
поле может быть типа object
[1].
Теперь, если я использую data
поле типаobject
значениеOO.ui.ComboBoxInputWidget
будет "[Object object]"
как он пытается разыграть data
значение в строке, когда пользователь выбирает элемент опции. Так выглядит OO.ui.ComboBoxInputWidget
позволяет только data
типаstring
в его вариантах. Это верно?
Это также означает, что в самом поле ввода отсутствует механизм "метка / данные". Если у меня есть следующие варианты
[
{ label: "Rot", data: "red" },
{ label: "Gelb", data: "yellow" },
{ label: "Grün", data: "green" }
]
и пользователь выбирает опцию с меткой "Gelb", поле ввода показывает "желтый", а не "Gelb". Пример кода в официальной документации демонстрирует это поведение [2]. Я что-то пропустил? Можно ли показатьlabel
пользователю, но получить data
(объект) при звонкеgetValue
на таком поле?
[1] https://doc.wikimedia.org/oojs-ui/master/js/
[2] https://doc.wikimedia.org/oojs-ui/master/js/
Этот вопрос был первоначально размещен на wikitech-l
список рассылки. Вы можете найти ветку здесь: http://markmail.org/message/fesegc3yljqcytzt
2 ответа
Как правило, свойство data для элементов внутри GroupElement
это могут быть строки или объекты, так как они представляют состояние вашего элемента. В OO.ui.mixin.GroupElement
, метод getItemFromData
может затем вернуть определенный элемент на основе его свойства данных. Если вы используете объект для данных, OOjs-UI будет использовать его OO.getHash()
в основном, чтобы привести в порядок ваш объект, чтобы он мог убедиться, что он получает правильный.
Свойство "данные" фактически проходит всю цепочку иерархии от OO.ui.Element
(если вы посмотрите на этот метод, описание этого параметра одно и то же) - и на этом уровне он определенно допускает любые данные, будь то строка или объект.
Однако при работе с конкретными случаями, например, ComboBoxInputWidget (терминология "входной виджет" обычно предполагает что-то внутри формы в OOjs-UI), означает, что размещение данных как объекта обычно не имеет смысла. Если ваш вариант использования не требует чего-то совсем другого, мы обычно хотим, чтобы ComboBoxInputWidget имел пару "value" => "label", поэтому он использует свое свойство "data" в качестве "value" и ожидает строку.
Что касается второй части вашего вопроса, я не уверен на 100%, что я понял это (пожалуйста, исправьте меня, если так), но насколько я понимаю, если вы установите элементы OO.ui.MenuOptionWidget с их данными в качестве значения ('red' / 'yellow' / 'green'и т. д.) и метку как mw.msg, которую видит пользователь, тогда он должен работать "из коробки".
Поэтому, если вы посмотрите на пример, приведенный в документации для ComboBoxInputWidget, вы можете установить для данных вашего элемента цвет (значение), а для метки - слово, которое вы хотите отобразить, а когда пользователь выбирает параметр, метка должна отображаться в ComboBoxInputWidget.
Имейте в виду, однако, что если вы слушаете событие "выбрать" или "выбрать" из этого входного виджета, вы получите выбранный элемент, поэтому, если вы проецируете этот выбор на какой-то другой вход, вы должны запросить метку (item.getLabel()
) а не данные.
Спасибо за ваши объяснения.
Похоже, что OOUI не поддерживает что-то подобное (пока).
Пример: у вас есть значение параметра "Q7186" и значение метки "Мария Кюри". Когда пользователь выбирает "Marie Curie", пользовательский интерфейс скажет: "Q7186". Пользователь может быть сбит с толку.
Я знаю, что некоторые пользовательские интерфейсы обрабатывают это, показывая label
выбранного элемента пользователю в элементе DIV или что-то еще и сохранение фактического значения во внутренней переменной. Когда дело доходит до представления формы и необходимости предоставления фактической "строки значения", они используют скрытое поле и, возможно, valueField
опция конфигурации, если "значение" - это не строка, а объект (что позволяет установить строковое значение скрытого поля из поля в объекте значения).
Может быть, это что-то для будущего развития.