簡體   English   中英

Orbeon XForms版本> = 4.5中fr:datatable的推薦替代方法

[英]Recommended alternative for fr:datatable in Orbeon XForms version >= 4.5

fr:datatable在Orbeon XForms 4.0中已棄用,現在從4.5版開始刪除(根據發行說明)。 我們在很大程度上依賴於該結構來創建可排序的表,並且由於事件捕獲功能得到了增強,在該函數中,很容易獲得完整的XML元素來執行有用的工作,而不是使用單個值。

對於fr:data表,推薦的替代方法是什么? 使用示例:

<fr:datatable width="100%" scrollable="vertical" height="300px">
    <xhtml:thead>
        <xhtml:tr>
            <xhtml:th fr:sortable="true" fr:sortKey="number(tokenize(@id,'\.')[last()])" fr:sortType="number" fr:resizeable="true">
                <xforms:output ref="$resources/id"/>
            </xhtml:th>
            <xhtml:th fr:sortable="true" fr:resizeable="true">
                <xforms:output ref="$resources/issue"/>
            </xhtml:th>
            <xhtml:th fr:sortable="true" fr:sortKey="@currentStatusCode" fr:resizeable="true">
                <xforms:output ref="$resources/status"/>
            </xhtml:th>
            <xhtml:th fr:sortable="true" fr:sortKey="@priority" fr:resizeable="true">
                <xforms:output ref="$resources/priority"/>
            </xhtml:th>
            <xhtml:th fr:sortable="true" fr:sortKey="@type" fr:resizeable="true">
                <xforms:output ref="$resources/type"/>
            </xhtml:th>
            <xhtml:th fr:sortable="true" fr:resizeable="true">
                <xforms:output ref="$resources/date"/>
            </xhtml:th>
            <xhtml:th fr:sortable="true" fr:sorted="ascending" fr:resizeable="true">
                <xforms:output ref="$resources/assigned-to"/>
            </xhtml:th>
            <xhtml:th fr:sortable="true" fr:sortKey="(assignment|tracking)[1]/string(@labels)" fr:resizeable="true">
                <xforms:output ref="$resources/label"/>
            </xhtml:th>
        </xhtml:tr>
    </xhtml:thead>
    <xhtml:tbody>
        <xhtml:tr repeat-nodeset="instance('issues-instance')/issue[if (string-length(instance('selected-issue-id'))&gt;0) then (tokenize(@id,'\.')[last()]=instance('selected-issue-id')) else (@currentStatusCode=tokenize(instance('selected-status-codes'),' ') and @type=tokenize(instance('selected-issue-types'),' ') and (instance('selected-issue-priorities')='' or @priority=tokenize(instance('selected-issue-priorities'),' ')) and (instance('selected-issue-labels')='' or tokenize(@currentLabels,'\s')=tokenize(instance('selected-issue-labels'),'\s')) and (instance('selected-issue-assignee')='' or (instance('selected-issue-assignee')='#UNASSIGNED#' and string-length(@lastAssignment)=0) or @lastAssignment=instance('selected-issue-assignee')) and @id=instance('issue-search-results')/issue/@id)]" id="open-issue-table">
            <xxforms:variable name="type" select="@type"/>
            <xhtml:td>
                <xforms:output ref="tokenize(@id,'\.')[last()]"/>
            </xhtml:td>
            <xhtml:td>
                <xforms:output ref="@displayName"/>
            </xhtml:td>
            <xhtml:td>
                <xxforms:variable name="currentStatusCode" select="@currentStatusCode"/>
                <xforms:output ref="instance('decor-types')/IssueStatusCodeLifeCycle/enumeration[@value=$currentStatusCode]/label[@language=$resources/@xml:lang]"/>
            </xhtml:td>
            <xhtml:td>
                <xxforms:variable name="priority" select="@priority"/>
                <xforms:output ref="instance('decor-types')/IssuePriority/enumeration[@value=$priority]/label[@language=$resources/@xml:lang]"/>
            </xhtml:td>
            <xhtml:td>
                <xxforms:variable name="itype" select="@type"/>
                <xforms:output ref="instance('decor-types')/IssueType/enumeration[@value=$itype]/label[@language=$resources/@xml:lang]"/>
            </xhtml:td>
            <xhtml:td>
                <xforms:output ref="@lastDate" xxforms:format="format-dateTime(.,'[Y]-[M01]-[D01]', (), (), ())"/>
            </xhtml:td>
            <xhtml:td>
                <xforms:output ref="@lastAssignment"/>
            </xhtml:td>
            <xhtml:td>
                <!--xforms:output ref="tracking/@labels[1]"/-->
                <xforms:repeat nodeset="tokenize(@currentLabels, '\s')" class="not-selectable">
                    <xxforms:variable name="selectedLabelCode" select="."/>
                    <xxforms:variable name="selectedLabelColor" select="instance('project-instance')/labels/label[@code=$selectedLabelCode]/@color"/>
                    <xxforms:variable name="selectedLabelName" select="instance('project-instance')/labels/label[@code=$selectedLabelCode]/@name"/>
                    <xhtml:div class="labelouterbox" title="{$selectedLabelName}">
                        <xhtml:div style="background-color:{$selectedLabelColor}; padding-left: 7px; float: left;">&#160;</xhtml:div>
                        <xhtml:div style="background-color: white;float: left;">
                            <xforms:output ref="concat('&#160;',$selectedLabelCode,'&#160;')"/>
                        </xhtml:div>
                    </xhtml:div>
                </xforms:repeat>
            </xhtml:td>
        </xhtml:tr>
    </xhtml:tbody>
    <xforms:action ev:event="fr-selection-changed">
        <xforms:setvalue ref="instance('selected-issue')/selected" value="event('selected')/@id"/>
        <xforms:send submission="get-issue-details-submission"/>
    </xforms:action>
</fr:datatable>

當前沒有與fr:datatable真正等效的東西。 我認為,按照現實的順序:

  1. 如果數據表適合您,請繼續使用它。 即使該代碼未隨Orbeon Forms一起提供,所需要做的就是從4.4放回datatable目錄 然后,您可以重新創建一個構建,如果要避免這種情況,您甚至可以將這些文件放在他們自己的jar文件中,並將該文件放在WEB-INF/lib (如果要進行后者,我認為您還需要自己將CoffeeScript文件編譯為.js ,因為這通常是由構建完成的。)
  2. 如果您可以使用fr:grid當前提供的功能,則可以改用該組件。 這是Form Builder用來處理所有表(包括重復的網格)的組件。 但是與數據表相比,它缺少許多功能(分頁,排序,可調整大小的列……),Orbeon正在考慮在不久的將來添加其中的一些功能。
  3. 使用您滿意的第三方組件,並使用XBL實現自己的“與XForms綁定”。 顯然,這可能涉及很多,特別是如果您還不熟悉XBL。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM