我有一个FlexTable并且有一个与之关联的点击事件.有时会发生多次事件被触发的事件.有时一次点击最多10次.我检查了多个事件处理程序,但我只有一个.从案例中可以明显看出,它有时每次点击只运行一次.
有没有人知道为什么会发生这种情况.
这是示例代码片段,我尝试调试它,发现点击处理程序多次启动.
private FlexTable flex = new FlexTable(); //it is a global variable
function A(){
flex.clear();
flex.removeAllRows();
flex.removeAllRows();
flex.setBorderWidth(2);
flex.setCellPadding(2);
flex.setCellSpacing(2);
flex.getRowFormatter().addStyleName(0, "historyTableHeader");
flex.setText(0, 0, "ID");
flex.setText(0, 1, "TIME);
flex.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
//some code which might result into call of function B
}
}
//function A is being called multiple times by say function B
Run Code Online (Sandbox Code Playgroud)
你已经回答了你的问题:
flex.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
//some code which might result into call of function B
}
}
//function A is being called multiple times by say function B
Run Code Online (Sandbox Code Playgroud)
在这种情况下,ClickHandler存在多次.您可以将代码更改为:
private FlexTable flex = new FlexTable(); //it is a global variable
private ClickHandler handler = null;
private void A(){
flex.clear();
//
if(handler == null){
handler = new ClickHandler(){}...
flex.addHandler(handler);
}
Run Code Online (Sandbox Code Playgroud)
更好:
private FlexTable flex = new FlexTable(); //it is a global variable
private HandlerRegistration handler = null;
private void A(){
flex.clear();
//
if(handler != null){
handler.removeHandler();
}
handler = flex.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
//some code which might result into call of function B
}
}
Run Code Online (Sandbox Code Playgroud)
但是我建议在创建FlexTable之后直接添加处理程序,并且只需要一次.