Чекбокс Xforms — замена True/False на Y/N

Я пишу форму (betterFORMs/Xforms), которая будет отображаться пользователю с выбором флажков. Если флажок не установлен, форма должна связать "N" с элементом. Когда отмечен, "Y". Я понимаю, что на этот вопрос уже есть ответы, но я безуспешно пробовал все ответы.

Первое решение, которое я попытался использовать, это здесь - ссылка на stackoverflow

(первое решение выглядит хорошо, но я добился большего успеха с решением 2, так как я не использую Orbeon)

Приведенный ответ - это то, что я ищу, но у меня возникли проблемы с реализацией этого в моей форме. Я не использую Xhtml или Orbeon, поэтому привязка, которую я использую, кажется, отличается от той, что используется в решении.) Я попытался настроить этот код, чтобы он соответствовал моей форме, но я получаю повторяющуюся ошибку от синтаксического анализатора xml каждый раз, когда я загружаю страницу, но это не указывает мне ни на что, связанное с новым кодом.

Следующее решение, которое я пробовал, находится здесь - ссылка на stackoverflow

Этот ответ дал наилучшие результаты в моем коде, потому что значения флажка меняются на N, когда они не используются и когда они не выбраны. Проблема с этим решением заключается в том, что набор Y в элементе формы содержится в фигурных скобках - [].

пример вывода:

<addressProof>N</addressProof><other>[Y]</other><otherText>_text_</otherText>

Вот фрагмент моей формы:

модель:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
xmlns="http://www.w3.org/2002/06/xhtml2" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
<xsl:output method="xml" />
<xsl:template match="/">
    <xforms:model id="documentsChecklist">
        <xforms:instance>   
            <actionform xmlns="">
                <xforms:model id="documentsChecklist">
                    <xforms:instance>   
                    <actionform xmlns="">
                        <detail>        
                            <other></other>
                            <otherText></otherText>
                        </detail>
                    </actionform>
        </xforms:instance>
        <xforms:bind id="other" nodeset="/actionform/detail/other" calculate="choose(. = 'Y', ., 'N')"/>
        <xforms:bind nodeset="/actionform/detail/otherBox" relevant="/actionform/detail/other ='Y'" /> 
    </xforms:model> 

форма:

<div id="formBody"><br />
    <xforms:select bind="other" appearance="full" align="right">
        <xforms:item>
            <xforms:label>Other</xforms:label>
            <xforms:value>Y</xforms:value>
        </xforms:item>
    </xforms:select>
    <xforms:input ref="/actionform/detail/otherText">
        <xforms:label>Please specify:*</xforms:label>
    </xforms:input>
</div>
</xsl:template>
</xsl:stylesheet>

Почему значение флажка теперь устанавливается на «[Y]» вместо «Y»? (Может быть, это как-то связано с массивом?) Спасибо.

ПС. Я знаю, что мог бы сделать это, используя логическое значение для каждого флажка, со значением флажка, соответствующим логическому значению, которое, в свою очередь, обновляет значение привязки. Мне бы не хотелось иметь большой блок логических элементов и привязок, поскольку у меня есть большое количество флажков. это решение имеет пример здесь - ссылка на stackoverflow


person a.hrdie    schedule 03.01.2014    source источник
comment
Какую реализацию XForms вы используете? Тело формы не влияет на привязку — XPath набора узлов зависит только от структуры экземпляра. Пожалуйста, добавьте полный последовательный пример, показывающий полную модель. В вашем выводе есть вывод addressProof, которого нет в модели.   -  person tohuwawohu    schedule 04.01.2014
comment
Привет тохувавоху. Я обновил свои фрагменты кода в соответствии с просьбой и включил пространство имен xforms.   -  person a.hrdie    schedule 06.01.2014
comment
Я использую betterForms (я думал, что в пространстве имен будет реализация... моя ошибка!)   -  person a.hrdie    schedule 07.01.2014


Ответы (1)


Элемент управления select позволяет вам выбрать более одного элемента, и мне интересно, почему используемая вами реализация XForms добавляет квадратные скобки (согласно спецификациям выбранные значения должны быть разделены символом пробела, что не всегда очень удобно) путь).

Я боюсь, что XForms 1.1 и XForms 2.0 требуют использования дополнительных промежуточных узлов и привязок. Было бы полезно иметь возможность добавить 2 выражения XPath для привязок: одно для преобразования значения узла в значение управления, а другое — обратно из значения управления в значение узла.

В качестве обходного пути я использую другое расширение XSLTForms: таблицы стилей XSLT для преобразования экземпляров.

-Ален

person Alain Couthures    schedule 04.01.2014
comment
Спасибо за ваш вклад Ален! - person a.hrdie; 06.01.2014