如何在GWT中全局修改/访问小部件?

时间:2011-03-29 21:32:08

标签: java gwt widget

我昨天刚开始使用GWT,所以也许我没有使用正确的机制来解决这个问题。因此,我将尝试准确地解释我正在尝试做什么(有一个简单的问题)和我提出的解决该问题的2个解决方案。

问题

记住可以通过其他小部件更新的索引。让我们用焦点来代表它。

[button 1]
[button 2]     [button A]
[button 3]
  • 按钮[1..3]和[A]不在同一个类中,需要使用DOM使用id查找元素。原因是这两个观点需要正交。
  • 我们可以使用向上/向下键将焦点从按钮1移动到3。
  • 如果我们在按钮[1..3]上并按向右键,我们会转到按钮A。
  • 如果我们在按钮A上并向左按下,我们会转到之前关注的按钮。

我们要做的是在按下右键时保存或设置焦点索引。

解决方案1 ​​:全局变量

我通常不喜欢全局变量,但在某些情况下它很方便。例如,通过使用javascript中全局定义的字典( Dictionary.getDictionary ),在这种情况下,我可以使用“焦点事件”将当前索引保存在其中。

所以,在按键事件中,当左边会被触发时,我只会读取字典中的值。

我还没有测试过,但我认为它应该可行。

解决方案2 :使用元素

设置值
Element element = DOM.getElementById("button id A");
element.<setFocusLeftKey>("button id [1..3]");

这里我想要实现的只是在“onFocus”事件中,我只需设置该按钮的值。

  • 那么可以使用Element投射/找到对象吗?我认为如果没有简单的方法,可能是因为它不推荐。
  • 有没有更简单的方法/其他方法来实现这一目标?

那么,有什么想法或解决方案吗?

提前致谢。

P.S。我没有找到更好的标题,所以如果有任何建议,只需将其放在评论中,我就会更新。

1 个答案:

答案 0 :(得分:1)

在GWT中使用ID绝对不是建议的方法。你说你需要这种机制来保持你的观点彼此正交。这是高尚的,但在GWT中,您可以通过使用另一个隐藏彼此不同组件的资源(在SimpleEventBus中实现的EventBus)来实现。事实上,我认为通过ID查找元素强烈地结合了两个视图并且很臭。

武装您的EventBus,您只需创建并触发自定义事件,让视图(或者更好的是,他们的演示者)彼此通信。例如,您可以:NavigateRightFromButtonsEventNavigagteLeftFromButtonA事件。

但是,根据应用的大小(或作为第一个实验),您可以决定将两个视图结合起来。在这种情况下,只需将按钮列表的视图传递给按钮A的视图,反之亦然。这并不比依赖全局ID更糟糕。

无论您选择哪种机制(事件总线或将视图连接在一起),您现在应该可以直接访问要突出显示的窗口小部件的实例。要集中注意力,只需在其上调用setFocus(true)即可。