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



fr:datatable在XForms4.0的Orbeon中被弃用,现在从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放回数据表目录。然后,您可以重新创建一个构建,如果您想避免这种情况,您甚至可以将这些文件放在它们自己的jar文件中,并将该文件放在WEB-INF/lib下。(如果执行后者,我认为您还需要自己将CoffeeScript文件编译为.js,因为这通常是由构建完成的。)
  2. 如果可以使用fr:grid中当前的功能,则可以使用该组件。这是Form Builder用来处理所有表格(包括重复网格)的组件。但与数据表相比,它缺少了许多功能(分页、排序、可调整大小的列…),其中一些Orbeon正在考虑在不久的将来添加
  3. 使用您满意的第三方组件,并使用XBL实现您自己的"与XForms绑定"。显然,这可能涉及到很多,尤其是如果您还不熟悉XBL的话

相关内容

  • 没有找到相关文章