我正在开发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
,属性dateEnd
和Item
)(已扩展)。可折叠面板为
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/