вставить в пример в повторе

моя ситуация следующая:

  1. У меня есть набор узлов, через который я повторяю и заполняю таблицу некоторыми данными
  2. Одно из полей, я хочу подвести итог

Проблема: К сожалению, я не могу использовать метод суммы для вычислений, так как набор узлов — это пользовательская функция, которая получает доступ к данным из других форм. И это, кажется, все портит.

Моя идея решения: я подумал, что могу создать экземпляр и на каждой итерации добавлять к нему значение. Затем я просто мог получить доступ к этим данным и выполнить необходимые вычисления. Но я не могу заставить xforms:insert работать.

Упрощенный вариант выглядит так:

            <xforms:repeat nodeset="(xxforms:si-source-forms('other_form'))">
              <!-- table here -->
              <xforms:insert
                 nodeset="instance('fr-form-instance')//positionen/position"
                 origin="instance('neue-position')"/>
            </xforms:repeat>

Экземпляр neue-position содержит привязки к значениям в исходной форме:

  <xforms:bind id="neue-position-binds" nodeset="instance('neue-position')">
    <xforms:bind id="neue-position-bind" nodeset="position">
      <xforms:bind id="neue-position-summe-bind" nodeset="summe" name="summe" type="xforms:string" required="true" xxforms:default="xxforms:si-source-forms('other_form')//gesamtbetrag_ausgabe" />
    </xforms:bind>
  </xforms:bind>

Однако он не работает должным образом, поэтому, очевидно, что-то не так. Буду признателен за любые подсказки.


person dhenze    schedule 10.05.2012    source источник


Ответы (1)


О вашем первом фрагменте кода:

Ваш <xforms:insert> не будет иметь никакого эффекта. Вы находитесь в представлении, и действие выполняется только в том случае, если оно прикреплено к прослушивателю событий. Без ev:listener в <xforms:insert> (или в действии вокруг этой вставки) он просто не запустится.

О суммировании узлов, не входящих в экземпляр:

Предполагая, что ваша пользовательская функция возвращает только одну «сумму» данных, вы можете написать код в соответствии с этими строками:

  1. Сохраните последовательность узлов, возвращенных функцией, в переменной <xf:var name="others" ref="xxforms:si-source-forms('other_form')"/>
  2. Используйте эту переменную в повторе: <xf:repeat ref="$others"> (кстати, теперь XForms стандартизирует использование ref везде вместо nodeset).
  3. Сделайте свой расчет: <xf:var name="my-sum" ref="sum($others/path/to/values)"/>.
  4. Наконец, я представляю, что вы хотите что-то сделать с $my-sum, может быть, показать это с <xf:output>.
person avernet    schedule 11.05.2012
comment
Спасибо за это, это заставило меня двигаться в правильном направлении. - person dhenze; 16.05.2012