我昨天刚开始使用GWT,所以也许我没有使用正确的机制来解决这个问题。因此,我将尝试准确地解释我正在尝试做什么(有一个简单的问题)和我提出的解决该问题的2个解决方案。
问题:
记住可以通过其他小部件更新的索引。让我们用焦点来代表它。
[button 1]
[button 2] [button A]
[button 3]
我们要做的是在按下右键时保存或设置焦点索引。
解决方案1 :全局变量
我通常不喜欢全局变量,但在某些情况下它很方便。例如,通过使用javascript中全局定义的字典( Dictionary.getDictionary ),在这种情况下,我可以使用“焦点事件”将当前索引保存在其中。
所以,在按键事件中,当左边会被触发时,我只会读取字典中的值。
我还没有测试过,但我认为它应该可行。
解决方案2 :使用元素
设置值Element element = DOM.getElementById("button id A");
element.<setFocusLeftKey>("button id [1..3]");
这里我想要实现的只是在“onFocus”事件中,我只需设置该按钮的值。
那么,有什么想法或解决方案吗?
提前致谢。
P.S。我没有找到更好的标题,所以如果有任何建议,只需将其放在评论中,我就会更新。
答案 0 :(得分:1)
在GWT中使用ID绝对不是建议的方法。你说你需要这种机制来保持你的观点彼此正交。这是高尚的,但在GWT中,您可以通过使用另一个隐藏彼此不同组件的资源(在SimpleEventBus中实现的EventBus)来实现。事实上,我认为通过ID查找元素强烈地结合了两个视图并且很臭。
武装您的EventBus,您只需创建并触发自定义事件,让视图(或者更好的是,他们的演示者)彼此通信。例如,您可以:NavigateRightFromButtonsEvent
和NavigagteLeftFromButtonA
事件。
但是,根据应用的大小(或作为第一个实验),您可以决定将两个视图结合起来。在这种情况下,只需将按钮列表的视图传递给按钮A的视图,反之亦然。这并不比依赖全局ID更糟糕。
无论您选择哪种机制(事件总线或将视图连接在一起),您现在应该可以直接访问要突出显示的窗口小部件的实例。要集中注意力,只需在其上调用setFocus(true)
即可。