Этот тег используется для определения возможных значений биндинга. На данный момент это влияет только на биндинги, используемые в атрибуте class
.
Когда биндинг используется в атрибуте class
, необходимо знать, какие значения он может принимать, для того чтобы:
образовывать правильные классы;
обнаруживать конфликты, когда одинаковые имена классов могут быть образованы разными биндингами, что может привести к ошибкам;
На данных момент такая проверка не делается, но она должна быть добавлена.
находить соответствия между классами в шаблонах и стилях, чтобы находить ненужные классы в шаблонах (для которых нет в стилях) и ненужные CSS
правила (которые не используются шаблонами);
Этим занимается модуль сборщика
extractor
. Эту информацию получает в виде предупреждающих сообщений плагин. С помощью флага--css-cut-unused
сборщику можно указать, чтобы он вырезал неиспользуемые вCSS
правила. Но рекомендуется это делать самостоятельно, на основе получаемых предупреждений.
минизировать имена классов в сборке.
Если все имена определены, для сборщика можно указать флаг
--css-optimize-names
, и тогда он минимизирует имена классов в шаблонах иCSS
до одно-/двух-буквенных, тем самым уменьшая размер сборки.
Тег имеет атрибуты:
name
– имя биндинга, для которого описывается правило;
type
– тип устанавлеваемый для биндинга, может быть два значения:
bool
– значение приводится к boolean
, если значение тождественно true
, то значением становится имя биндига и класс вставляется, иначе класс не вставляется;
invert
- противоположен типу bool
. Значение приводится к boolean
, если значение тождественно false
, то значением становится имя биндига и класс вставляется, иначе класс не вставляется;
enum
– значение должно быть равно одному из списка (сравнивается оператором ==
, регистрозависимо), то это значение становится классом и вставляется, иначе класс не вставляется;
values
– применимо только к типу enum
, содержит список допустимых значений, разделеных пробелом;
default
– значение по умолчанию:
для типа bool
– если значение атрибута равно true
, то значение по умолчанию true
, при других значениях или если атрибут не указан, то значение по умолчанию – false
;
для типа invert
– если значение атрибута равно false
, то значение по умолчанию false
, при других значениях или если атрибут не указан, то значение по умолчанию – true
;
для типа enum
– если указано значение из списка (values
), то оно будет по умолчанию, если значения нет в списке или атрибут не указан – по умолчанию будет пустая строка (класс не будет проставлен в эталон).
from
– имя существующего биндинга, источник значения для нового биндинга
<b:define name="selected" type="bool"/>
<b:define name="state" type="enum" values="processing ready error"/>
<b:define name="notReady" from="state" type="enum" values="processing"/>
<b:define name="hasName" from="username" type="bool"/>
<div class="item item_{selected} item_{state} {notReady} {hasName}"/>
В данном примере, если значение для selected
равноценно true
, то будет вставлен класс item_selected
, иначе такого класса у элемента не будет. Для state
будут приниматься только три значения и образовываться классы item_processing
, item_ready
и item_error
; при других значениях класс добавлен не будет.
Указание default
позволяет оптимизировать создание шаблона. Если известно, что некоторый биндинг при создании чаще всего имеет определенное значение, можно изначально проставить класс с этим значением и избежать операции вставки этого класса при создании экземпляра шаблона. Например, практически все экземпляры basis.ui.Node
создаются с selected
== false
и unselected
== true
. Если в шаблоне используются оба значения, то выгоднее описать шаблон так:
<b:define name="selected" type="bool"/>
<b:define name="unselected" type="bool" default="true"/>
<div class="item item_{selected} item_{unselected}"/>
Тогда эталонный DOM
фрагмент, который клонируется при создании экземпляра шаблона, будет таким:
<div class="item item_unselected"/>
И, в данном примере, при создании экземпляра шаблона никаких изменений в склонированом DOM
фрагменте не будет.