GWT UiBinder:onClick事件不会触发

时间:2011-02-23 17:33:47

标签: gwt uibinder

你好,

我有一个小部件定义如下:

<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事件就会被触发。任何意见? 谢谢,克里斯

2 个答案:

答案 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");
}

当我点击链接时,这会触发警报。希望这可以帮助你。