单击 GWT 会触发多个单击事件
Multiple click events fire on a single click GWT
我有一个 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
您已经回答了您的问题:
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
在这种情况下,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);
}
更好:
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
}
}
但我建议在创建 FlexTable 之后直接添加处理程序,并且只添加一次。
我有一个 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
您已经回答了您的问题:
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
在这种情况下,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);
}
更好:
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
}
}
但我建议在创建 FlexTable 之后直接添加处理程序,并且只添加一次。