我有一个小部件定义如下:
<g:HTMLPanel>
<g:HTML ui:field="rootElement" styleName="{resources.mainStructure.widgetBox}"/>
</g:HTMLPanel>
在相关的java类中有类似的东西:
@UiField HTML rootElement;
for(int row = 0; row < 10; row ++) {
rootElement.getElement().appendChild(new MyWidget().getElement());
}
MyWidget就像这样:
<g:HTMLPanel>
<table border="0" cellpadding="0" cellspacing="0" class="{resources.mainStructure.areaWidget}">
<tbody class="{resources.mainStructure.workArea}">
<tr>
<td ui:field="td_1"/>
<td ui:field="td_2"/>
<td ui:field="td_3"/>
<td ui:field="td_4"/>
<td ui:field="td_5"/>
<td ui:field="td_6"/>
<td ui:field="td_7"/>
<td ui:field="td_8"/>
</tr>
</tbody>
<tfoot class="{resources.mainStructure.lineaBus}">
<tr>
<th ui:field="th_1"/>
<th ui:field="th_2"/>
<th ui:field="th_3"/>
<th ui:field="th_4"/>
<th ui:field="th_5"/>
<th ui:field="th_6"/>
<th ui:field="th_7"/>
<th ui:field="th_8"/>
</tr>
</tfoot>
</table>
在某些时候,我附加了某个td另一个小部件,这个小部件:
<g:HTMLPanel>
<g:Anchor styleName="{resources.mainStructure.orangeButton}" ui:field="selectMe">+</g:Anchor>
</g:HTMLPanel>
现在,问题在于,当我单击上面窗口小部件的锚点时,不会触发任何单击。如果我将锚点小部件附加到另一个小部件,而不是td,它可以正常工作。 到目前为止,我理解问题出现在第一个小部件中,因为如果我将MyWidget附加到“selectMe”onclick事件就会被触发。任何意见? 谢谢,克里斯
答案 0 :(得分:3)
小心使用像......这样的电话。
rootElement.getElement().appendChild(new MyWidget().getElement());
'appendChild(...)'方法只不过是一个基本的DOM附件;它没有做任何事件传播的工作。您是否有理由不使用Widget add method()?
rootElement.add(new MyWidget());
这应该有用,并且会排列你需要的所有事件。
答案 1 :(得分:0)
这对我有用,不知道你是如何构建它的。所以我理解你的输出有点像这样:
<g:HTMLPanel>
...
<td ui:field="td_1">
<g:HTMLPanel>
<g:Anchor styleName="" ui:field="selectMe">+</g:Anchor>
</g:HTMLPanel>
</td>
...
在我创建selectMe锚点的ui binder类中,我刚刚添加了一个UiHandler,如下所示:
@UiField Anchor selectMe;
@UiHandler("selectMe")
void onSelectMeAnchorClick(ClickEvent event) {
Window.alert("clicked on selectMe");
}
当我点击链接时,这会触发警报。希望这可以帮助你。