我正在尝试使用GWT CellTree来显示异构的分层数据模型。我需要能够进行单一选择,但能够选择父节点以及子节点。例如,如果查看GWT自己的example,就会发现它们只为leave节点提供了一个选择模型。
我试图通过为所有节点提供一个选择模型来扩展他们的示例。然而,这似乎是不可能的。所以我最终得到了3个SelectionModels,每个节点类型(Composer,PlayList,Song)一个。
我遗漏了什么?
提前谢谢。
发布于 2011-09-27 18:47:45
在getNodeInfo的TreeViewModel函数中,您必须将selectionModel传递给每个级别的每个新have实例。
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)
}
}https://stackoverflow.com/questions/7558254
复制相似问题