Учебник по Showcase: Добавление и удаление узлов

Материал из Course Orchestra
Перейти к: навигация, поиск

Внимание! Изложенная здесь информация устарела! В качестве учебника следует использовать https://share.curs.ru/webhelp/ (work in progress).


xml с данными:

<schema xmlns="">
   <info>
      <name id="" value=""/>
      <name id="" value=""/>
      <name id="" value=""/>
      <name id="" value=""/>
      <name id="" value=""/>
   </info>
</schema>

Шаблон:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="xsltforms/xsltforms.xsl" type="text/xsl"?>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ev="http://www.w3.org/2001/xml-events"
    xmlns:xf="http://www.w3.org/2002/xforms">
    <head>
        <xf:model id="mainModel">
        
            <xf:instance id="mainInstance">
                <schema xmlns=""/>
            </xf:instance>
            
            <xf:instance id="nameTemplate">
                <schema xmlns="">
                    <name id="" value=""/>
                </schema>
            </xf:instance>
            
        </xf:model>
    </head>
    <body>
        <xf:group id="group" ref="/schema/info/">
            <xf:trigger>
                <xf:label>Добавить</xf:label>
                <xf:action ev:event="DOMActivate">
                    <xf:insert nodeset="./name" origin="instance('nameTemplate')/name" at="1"
                        position="after"/>
                </xf:action>
            </xf:trigger>
            <xf:repeat id="names" nodeset="./name">
                <xf:output ref="'Номер п/п: ' + position() + ' '"/>
                <xf:input ref="@id"/>
                <xf:input ref="@name"/>
                <xf:trigger>
                    <xf:label>Удалить</xf:label>
                    <xf:action ev:event="DOMActivate">
                        <xf:delete nodeset="/schema/info/name[index('names')]"/>
                    </xf:action>
                </xf:trigger>
            </xf:repeat>
        </xf:group>
    </body>
</html>

Для добавления и удаления узлов в XForms используются элементы xf:insert и xf:delete. Добавление узла обычно происходит при клике на кнопку и прописывается в тэге xf:action. Элемент добавления xf:insert содержит следующие атрибуты:

  • nodeset - адрес, куда будет вставляется новый узел
  • at - номер узла, куда будет вставляться новый узел
  • position - до или после данного узла будет вставка
  • origin - вставляемый узел. Здесь часто используется вспомогательный instance

Удаление узла также обычно происходит при клике на кнопку и прописывается в тэге xf:action. Элемент удаления xf:delete содержит атрибут @nodeset, в котором указываются удаляемые узлы. Обратите внимание, что в тестовом примере используется новая функция index('repeatId'). Она возвращает номер активного в repeat элемента. Это необходимо, чтобы при нажатии на одну из кнопок "Удалить" (а они тоже прописаны в xf:repeat, поэтому будут повторяться) удалялся конкретный узел.