GXT 3:GridSelectionModel SelectionEvent / SelectionChangedEvent未触发

时间:2013-03-20 01:40:13

标签: java gwt event-handling grid gxt

GXT 3问题:

当我选择网格上的任何行时,有没有人知道为什么这两个处理程序没有被触发? SelectionModel是GridSelectionModel,设置为单选。

还有其他声明要做吗?这很简单,不是吗。我为GXT 2.2添加事件监听器没有问题,但GXT 3有一些变化。这些事件用于检测行选择,不是吗?

SelectionChangedHandler<Summary> gridSelectionChangedHandler = 
  new SelectionChangedHandler<Summary>() {
    public void onSelectionChanged(
      SelectionChangedEvent<Summary> event) {
        Summary rec = event.getSelection().get(0);
        Window.alert("Row = "+ rec.getId());    
    }
  };

SelectionHandler<Summary> gridSelectionHandler =
  new SelectionHandler<Summary>() {
    public void onSelection(SelectionEvent<Summary> event) {
      Summary rec = event.getSelectedItem();
      Window.alert("Row = "+ rec.getId());    
    }
  };

public SummaryViewImpl() {
  uiBinder.createAndBindUi(this);
  this.grid.addSelectionChangedHandler(gridSelectionChangedHandler);
  this.grid.addSelectionHandler(gridSelectionHandler);
}

但是,我对RowClickEvent没有任何问题,因为以下是触发:

@UiHandler({ "grid" })
void onRowClick(RowClickEvent event){
    int row = event.getRowIndex();
    Window.alert("Row = "+ row);        
}

grid是SummaryGrid的一个实例:

public class SummaryGrid
extends Grid<Summary>{


  {
    this.sm = new GridSelectionModel<Summary>();
    this.sm.setSelectionMode(SelectionMode.SINGLE);
  }


  blah ... blah ...

  public HandlerRegistration addSelectionChangedHandler(SelectionChangedHandler<Summary> handler){
    return this.getSelectionModel().addSelectionChangedHandler(handler);
  }

  public HandlerRegistration addSelectionHandler(SelectionHandler<Summary> handler){
    return this.getSelectionModel().addSelectionHandler(handler);
  }

  blah ... blah ...
}

2 个答案:

答案 0 :(得分:3)

试试这个grid.getSelectionModel().addSelectionChangedHandler

不确定是否需要先设置选择模式,但我的工作代码如下:

grid.getSelectionModel().setSelectionMode(SelectionMode.SINGLE);

grid.getSelectionModel().addSelectionChangedHandler(new SelectionChangedHandler<Summary>() {
...
}

答案 1 :(得分:0)

没关系!犯了访问本地私有变量而不是访问属性get / set方法的错误。

在扩展类中,执行以下操作:

this.setSelectionModel(selectionModel);
this.getSelectionModel().setSelectionMode(SelectionMode.SINGLE);

而不是这样做:

this.sm =selectionModel;
this.sm.setSelectionMode(SelectionMode.SINGLE);

因为,当我直接访问sm变量时,setter必须绑定选择模型。

课程强化:在扩展课程时,应该访问setter / getters而不是访问其关联的局部变量。