0

GXT3 の質問:

グリッド上の行を選択したときに、これら 2 つのハンドラーがトリガーされない理由を知っている人はいますか? 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 ...
}
4

2 に答える 2

3

これを試してgrid.getSelectionModel().addSelectionChangedHandler

最初に選択モードを設定する必要があるかどうかはわかりませんが、私の作業コードは次のようになります:

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

grid.getSelectionModel().addSelectionChangedHandler(new SelectionChangedHandler<Summary>() {
...
}
于 2013-03-20T01:50:21.253 に答える
0

どうでも!プロパティの get/set メソッドにアクセスするのではなく、ローカルのプライベート変数にアクセスするという間違いを犯しました。

拡張クラスで、次のようにします。

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

これを行うのではなく:

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

なぜなら、セッターは、sm変数に直接アクセスするときに実行されない選択モデルをバインドする必要があるためです。

強化された教訓: クラスを拡張するときは、関連するローカル変数にアクセスするのではなく、セッター/ゲッターにアクセスする必要があります。

于 2013-03-20T02:28:01.387 に答える