GWT CellTree选择父节点

时间:2011-09-26 16:35:02

标签: gwt selectionmodel

我正在尝试使用GWT CellTree来显示异构的分层数据模型。我需要能够进行单一选择,但能够选择父节点以及子节点。例如,如果你看看GWT自己的example,你会发现它们只为离开节点提供了一个选择模型。

我试图通过为所有节点提供一个选择模型来扩展他们的示例。但是,这似乎是不可能的。所以我最终得到的是每个节点类型(Composer,PlayList,Song)的3个SelectionModel。

我错过了什么?

提前致谢。

1 个答案:

答案 0 :(得分:1)

TreeViewModel getNodeInfo 函数中,您必须将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)
        }
}