Ошибка связывания элемента XForms - PullRequest
1 голос
/ 03 июня 2010

Я изменяю свой код, чтобы использовать привязки в XForms (что лучше, чем везде использовать наборы узлов!), Но я получаю ошибки.

Я получаю сообщение об ошибке: «Ошибка: ошибка XForms (8): идентификатор (data_criterion) не ссылается на элемент привязки ...»

Из учебных пособий / руководств, которые я использовал, кажется, что это должно работать, но я явно что-то упускаю! (кстати, я смоделировал свой код привязки после примеров здесь: http://en.wikibooks.org/wiki/XForms/Bind)

Изначально я думал, что проблема в том, что я использовал элементы управления xf: select, а не xf: input, как в примерах, но даже когда я перебил свой код до наиболее упрощенного кода, я все равно получаю ошибки! 1008 *

Это код модели, который я использую:

 <xf:model id="select_data">

     <xf:instance id="criteria_data" xmlns="">
         <file>
             <criteria>
                 <criterion></criterion>
             </criteria>
         </file>
     </xf:instance>

     <bind id="data_criterion" nodeset="instance('criteria_data')/criteria/criterion"/>

</xf:model>

Что касается кода пользовательского интерфейса, это то, что у меня есть:

<xf:input bind="data_criterion">
    <xf:label>Enter criteria:</xf:label>
</xf:input>

Полученное сообщение об ошибке: «Ошибка: ошибка XForms (8): идентификатор (data_criterion) не ссылается на элемент привязки ...»

Кто-нибудь знает, в чем проблема? Кроме того, есть ли какое-то особенное использование привязок и элементов управления xf: select (с xf: itemset), о которых мне следует знать? (В конечном итоге я использую много элементов управления xf: select в моей форме ..)

Заранее спасибо!

EDIT:

Я пропустил код через валидатор и получил это сообщение (относится к строке привязки): «Внимание: должен ли к следующему элементу применяться пространство имен XForms ?: bind (строка 66)»

1 Ответ

2 голосов
/ 04 июня 2010

Несколько вещей, которые вы можете изменить:

  1. Не уверен, что это является причиной ошибки, но выражение nodeset должно быть instance('criteria_data')/criteria/..., без file. Помните: instance() возвращает корневой элемент, а не узел документа. (Это тот, который вы позаботились, обновив вопрос; хорошо)
  2. Вам не хватает xf на bind. Должно быть: <xf:bind id="data_criterion" nodeset="instance('criteria_data')/criteria/criterion"/>.

Смотрите ниже полный пример с вашим кодом, который отлично работает у меня в Orbeon Forms:

<xhtml:html xmlns:xhtml="http://www.w3.org/1999/xhtml"
      xmlns:xforms="http://www.w3.org/2002/xforms"
      xmlns:xf="http://www.w3.org/2002/xforms"
      xmlns:xxforms="http://orbeon.org/oxf/xml/xforms"
      xmlns:ev="http://www.w3.org/2001/xml-events"
      xmlns:xs="http://www.w3.org/2001/XMLSchema"
      xmlns:fr="http://orbeon.org/oxf/xml/form-runner">
    <xhtml:head>
        <xhtml:title>SO Bind</xhtml:title>
        <xf:model id="select_data">

            <xf:instance id="criteria_data" xmlns="">
                <file>
                    <criteria>
                        <criterion>Gaga</criterion>
                    </criteria>
                </file>
            </xf:instance>
            <xf:bind id="data_criterion" nodeset="instance('criteria_data')/criteria/criterion"/>
       </xf:model>

    </xhtml:head>
    <xhtml:body>
        <xf:input bind="data_criterion">
            <xf:label>Enter criteria:</xf:label>
        </xf:input>
    </xhtml:body>
</xhtml:html>
...