我正在开发GWT应用程序(我对GWT还是很陌生,所以这是对最佳实践的要求;我在SO或其他地方找不到任何相关的答案)需要时间轴。此时间轴(带有描述,标签,交互句柄和图解)位于其自己的容器(Panel)中。

          [<] [now] [>]             // Interaction (navigation)
          2007 2008 2009 2010       // Labels
          |    |    |    |
+ Group 1                           // Collapsible groups
- Group 2
  Item 2a  =====   ==               // Item with plots (plots are wrapped in container per Item)
  Item 2b    =====     ===  =
-Group 3
  Item 3a ===
  Item 3b      ===


现在,当用户浏览时间线(使用按钮向前或向后移动)时,我需要重新计算布局的一些元素:


标签需要重新计算/重新定位
地块需要重新计算/重新定位。图表基于一组已与Timeslot有关的Widget元素(扩展dateStart,属性dateEndItem)(已扩展)。


可折叠面板为Group

据我所知,我现在有两个处理导航的选项:


我可以DisclosurePanel容器面板并进行完整的重绘。为此,我需要为所有组保留状态(折叠/展开)。 (顺便说一下,(组和项目在整个期间都是静态的!)
我可以让绘图容器(每个clear()有其自己的Item这是一个TimeslotContainer)持有对其所有FlowPanel的引用,然后让每个Timeslot重新绘制自身(即,与过滤器和位置相关的TimeslotContainer s)基于当前时间跨度。这将进行几次次重绘(每个Timeslot每个扩展的Item重绘),优点是将保留Group,从而保持其自身状态。


我倾向于第二种解决方案。但是,这有什么最佳实践吗?我会错过一些常见的陷阱吗?

最佳答案

如果组和项目是静态的,我也建议第二种方法。
DOM操作(构造等)正确地是GWT应用程序中最昂贵的功能(在性能方面),因此应将这些DOM操作保持在最低水平。
但是,我认为这里的性能可能不是大问题,因为DOM元素的数量相对较低。

尽管如此,我仍然认为第二种方法更好。您不必存储组和项目的状态,并且由于它们是静态的,因此重绘它们实际上没有任何意义。

我只能想到第一种方法的优点:
只有一个相对简单的绘制功能。在第二种方法中,所有TimesSlotContainer都必须实现一个函数以重绘自身,并考虑到Timespan的位置和上下文。该功能可能比一个大的重绘功能更为复杂。

关于java - 重绘GWT页面中的容器或单个动态元素?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8034111/

10-10 23:55