GWT:如何在Cell List中实现手风琴效果?

时间:2012-05-12 19:55:23

标签: css gwt accordion rpc celllist

我有一个RPC生成的小部件列表,其中包含标题和正文。我想垂直显示它们,只显示标题。当用户单击标题时,相应的主体将向下滑入视图,并且任何其他打开的实体将滑出视图。

可以使用StackPanel实现手风琴效果。但是,我还希望易于分页和访问CellList和AsyncDataProvider提供的远程数据。它looks like两者将在GWT 2.5中一起提供,遗憾的是还没有。

我的另一个想法是使用CellList,并在每个单元格上使用相对定位来获得手风琴效果。逻辑很容易实现,但从单元格列表中获取单元格并弄乱它们的style属性似乎是一个肮脏的黑客。

有更好的方法吗?

跟进 :(我不确定这是否应该是一个单独的问题。)CellList的结构如下所示:

<div __gwtcellbasedwidgetimpldispatchingfocus="true" __gwtcellbasedwidgetimpldispatchingblur="true" class="GJOQRHCBPB GJOQRHCBMK">  

<div onclick="" __idx="0" class="GJOQRHCBLB" style="outline:none;" tabindex="0">
  <!-- my cell html -->
</div>
<div onclick="" __idx="1" class="GJOQRHCBLB" style="outline:none;" tabindex="1"> <!-- ... -->
<div onclick="" __idx="2" class="GJOQRHCBLB" style="outline:none;" tabindex="2"> <!-- ... -->
<!-- ... -->
</div></div>

为单元格设置样式非常简单,并且可以在页面上正确显示。但是,我对单元格的样式不会影响父div(使用__idx),并且它们仍会延伸整个原始长度。这意味着如果单击“应该是”单元格列表的下方,将触发选择事件。如果我可以直接访问和设置__idx div,那么这可以修复,但我担心这是一个非常脏的黑客。有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

GWT 2.5将添加的内容是为CellTable (或DataGrid)中的单个项构建多个行的方法;它不会改变CellList的任何内容。此外,您仍然负责处理事件以扩展/折叠行,可能会为它们设置动画,最多只有一个扩展行也不会免费提供。

总而言之,它不会为您的用例改变任何内容。

您需要在单元格的渲染/事件处理中烘焙此展开/折叠行为。至于折叠其他行,您必须从列表级别开始处理DOM(即找到所有可折叠元素并确保它们已折叠,然后展开需要它的行)。
或者,您可以使用NoSelectionModelSingleSelectionModel,只需将所选/最后选择的项目展开为展开式,其他项目展开(如果需要,则从SelectionHandler触发重绘)。你可能会丢失动画。