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'))>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;"> </xhtml:div>
<xhtml:div style="background-color: white;float: left;">
<xforms:output ref="concat(' ',$selectedLabelCode,' ')"/>
</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
。我认为,按照现实性的顺序:
- 如果数据表对你有用,就继续使用它。即使代码没有随Orbeon Forms一起提供,也只需要从4.4放回数据表目录。然后,您可以重新创建一个构建,如果您想避免这种情况,您甚至可以将这些文件放在它们自己的
jar
文件中,并将该文件放在WEB-INF/lib
下。(如果执行后者,我认为您还需要自己将CoffeeScript文件编译为.js
,因为这通常是由构建完成的。) - 如果可以使用
fr:grid
中当前的功能,则可以使用该组件。这是Form Builder用来处理所有表格(包括重复网格)的组件。但与数据表相比,它缺少了许多功能(分页、排序、可调整大小的列…),其中一些Orbeon正在考虑在不久的将来添加 - 使用您满意的第三方组件,并使用XBL实现您自己的"与XForms绑定"。显然,这可能涉及到很多,尤其是如果您还不熟悉XBL的话