0

GWT CellTreeを使用して、異種の階層データモデルを表示しようとしています。単一の選択ができる必要がありますが、親ノードと子ノードを選択できる必要があります。たとえば、GWT自体のを見ると、Leaveノードに対して1つの選択モデルしか提供されていないことがわかります。

すべてのノードに1つの選択モデルを提供することで、例を拡張しようとしました。しかし、それは不可能のようです。つまり、ノードタイプ(作曲家、プレイリスト、曲)ごとに3つのSelectionModelsが1つあることになりました。

私は何が欠けていますか?

前もって感謝します。

4

1 に答える 1

1

TreeViewModelgetNodeInfo関数では、selectionModelを各レベルの新しいDefaultNodeInfoインスタンスに渡す必要があります。

return new DefaultNodeInfo<MyDTO>(dataProvider,new MyDTOCell(),selectionModel,null);

次に、SelectionChangeEventHandlerで次のようなことを行います。

selectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() {
    @Override
    public void onSelectionChange(SelectionChangeEvent event) {
        Object object = selectionModel.getSelectedObject();
        if (object instanceof MyRootDTO)
        {
              // DO SOMETHING with root level selected node
        }
        else if (object instanceof MySecondLevelDTO) {
        // DO SOMETHING WITH 2. level selected node
        }
        // additional levels
});

更新
入力の問題を回避するために、すべてのDTOによって拡張される抽象基本クラスを定義できます。

public abstract class BaseModel  {

    public static final ProvidesKey<BaseModel> KEY_PROVIDER = new ProvidesKey<BaseModel>() {
      public Object getKey(BaseModel item) {
        return item == null ? null : item.getId();
      }
    };

    public abstract Object getId();
}

DTOで、BaseModelを拡張し、抽象getId()メソッドを実装します。

public class MyDTO extends BaseModel {
        @Override
        public Object getId() {
             //return unique ID (i.e. MyDTO_1)
        }
}
于 2011-09-27T10:47:44.713 に答える