Podczas projektowania interfejsu XForm do bazy danych XML (przy użyciu eXist i XSLTForms), chciałbym dołączyć kontrolkę wejściową dla elementu opcjonalnego. Rekordy danych XML już istnieją, a niektóre zawierają element opcjonalny, a inne nie. Aby zaktualizować rekord, używam istniejącego rekordu XML jako instancji modelu. Problem polega na tym, że formant formularza nie jest wyświetlany, gdy element opcjonalny nie jest obecny, co jest logiczne, ale stanowi problem, gdy użytkownik chce dodać dane do opcjonalnego elementu.Umożliwianie formantowi XForm dla opcjonalnych elementów XML
Aby być bardziej wyraźne, oto przykład zapis danych, data.xml:
<a>
<b>content</b>
</a>
z RNC schematu:
start =
element a {
element b { text },
element notes { text }?
}
XForms model:
<xf:model>
<xf:instance xmlns="" src="data.xml"/>
<xf:submission id="save" method="post" action="update.xq" />
</xf:model>
i sterowanie:
<xf:input ref="https://stackoverflow.com/a/notes">
<xf:label>Notes (optional): </xf:label>
</xf:input>
Problem polega na tym, że kontrolka wprowadzania "Uwagi" po prostu nie jest wyświetlana.
Oczywistym rozwiązaniem jest dodanie przycisku wyzwalacza, aby umożliwić użytkownikowi wstawienie elementu, jeśli jest to potrzebne, ale lepiej jest po prostu wyświetlić sterowanie wejściowe i być puste.
Moje pytanie brzmi: czy istnieje subtelna kombinacja mniej znanych atrybutów/binds/multiple instances/xpath wyrażenia, które spowodują, że kontrola będzie zawsze wyświetlana?
Dzięki za tę sugestię. Odkąd odkryłem, że dodawanie _new_ elementów z insertem nie jest łatwe. – Cam
Tak, 'xforms: insert' jest dość skomplikowaną konstrukcją, szczególnie ze względu na wszystkie atrybuty, których można użyć na tym elemencie. Ale są tu 2-3 główne przypadki użycia, każde z nich wymaga różnych atrybutów, a gdy już się to stanie, stają się prostsze. Możesz znaleźć rodzaj samouczka dla 'xforms: insert' na: http://wiki.orbeon.com/forms/how-to/repeat-insert-position – avernet