Вы можете сделать это с помощью ограничения XPath, которое выглядит следующим образом:
<xf:bind
ref="my-value"
constraint="
if (tokenize(., '\s+') = 'none') then
count(tokenize(., '\s+')) = 1
else
true()"/>
Это означает следующее:
- , если выбрано значение «none», затем убедитесь, что есть только это значение (
count() = 1
) - , если это не так, элемент управления помечается как недействительный
- , если не выбрана опция none, тогдаэлемент управления действителен
В качестве альтернативы или дополнения, как указывает Алекс выше, вы можете автоматически отменить выбор других параметров, когда пользователь выбирает параметр «none»:
<xf:bind
ref="my-value"
calculate="if (tokenize(., '\s+') = 'none') 'none' else ."
readonly="false()"/>
То, что это делает:
- , если выбрано значение «none», убедитесь, что значение установлено только на «none»
- В противном случае сохраните значение как есть.
- также убедитесь, что значение не доступно только для чтения (что будет использоваться по умолчанию при использовании вычисления)
ОБНОВЛЕНИЕ 2016-11-25:
Исходное решение также может быть выражено как:
<xf:bind
ref="my-value"
constraint=". = 'none' or count(tokenize(., '\s+')) != 1"/>