代码之家  ›  专栏  ›  技术社区  ›  Blessed Geek

GXT 3:GridSelectionModel SelectionEvent/SelectionChangedEvent未激发

  •  0
  • Blessed Geek  · 技术社区  · 11 年前

    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 回复  |  直到 11 年前
        1
  •  3
  •   user1258245    11 年前

    试试这个 grid.getSelectionModel().addSelectionChangedHandler

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

    grid.getSelectionModel().setSelectionMode(SelectionMode.SINGLE);
    
    grid.getSelectionModel().addSelectionChangedHandler(new SelectionChangedHandler<Summary>() {
    ...
    }
    
        2
  •  0
  •   Blessed Geek    11 年前

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

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

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

    而不是这样做:

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

    因为,setter必须绑定在我直接访问sm变量时不执行的选择模型。

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