我正在尝试按照基本的CellTree gwt示例显示类别树。
我坚持的是确定类别的“叶子”状况。
当它没有孩子时,它是“a-a-leaf”,对吧?所以,这是我的类别(我使用Objectify作为appengine持久性):
@Entity
public class Categoria implements Serializable {
private static final long serialVersionUID = 1L;
@Id
Long id;
String nome;
Key<Categoria> parent;
public Categoria() { }
public Categoria(String nome) {
super();
this.nome = nome;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public Key<Categoria> getParent() {
return parent;
}
public void setParent(Key<Categoria> parent) {
this.parent = parent;
}
}
我的TreeViewModel基于AsyncDataProvider(我从外面传递):
public class CategorieTreeViewModel implements TreeViewModel {
private AbstractDataProvider<Categoria> dataProvider;
public CategorieTreeViewModel(AbstractDataProvider<Categoria> dataProvider) {
this.dataProvider = dataProvider;
}
@Override
public <T> NodeInfo<?> getNodeInfo(T value) {
return new DefaultNodeInfo<Categoria>(dataProvider, new CategoriaCell());
}
@Override
public boolean isLeaf(Object value) {
return false;
}
}
所以这是:
dataProvider = new AsyncDataProvider<Categoria>() {
@Override
protected void onRangeChanged(HasData<Categoria> display) {
updateTree();
}
};
private void updateTree() {
rpcService.getCategorie(new AsyncCallback<Categoria[]>() {
@Override
public void onSuccess(Categoria[] result) {
dataProvider.updateRowCount(result.length, true);
dataProvider.updateRowData(0, Arrays.asList(result));
}
@Override
public void onFailure(Throwable caught) {
Window.alert(caught.toString());
}
});
}
问题是:因为我的Category bean上没有“叶子属性”,我怎么知道它是否有孩子?通过明显地进行查询,但isLeaf方法需要同步返回,如何进行rpc调用?
或者我可以在getCategorie()调用中检索“leaf”信息,在运行时填充属性,但这可能是性能问题。
我该怎么办?
答案 0 :(得分:0)
我会在Categoria类中添加一个瞬态属性,boolean isLeaf
,然后在setParent
方法中,您可以将父级的isLeaf
属性设置为false(因为如果{{1}对象的父级为this
,然后that
对象不是叶子)。使属性瞬态意味着它不会被持久化,因此您不必担心在数据模型中使用该字段。
编辑:以下是我对that
班级的Categoria
方法进行编码的方法......
setParent
这样,一旦你建立了public void setParent(Key<Categoria> parent) {
this.parent = parent;
parent.setIsLeaf(false);
}
节点的模型,每个节点都会知道它是否是一片叶子。这是有效的,因为如果Categoria
作为孩子有parent
,则this
不可能是一片叶子。将parent
属性默认为isLeaf
,您只需检查其属性即可知道任何给定的true
是否为叶子。