基本的なCellTreegwtの例に従って、カテゴリのツリーを表示しようとしています。
私が立ち往生しているのは、カテゴリの「葉」の状態を判断することです。
子供がいない場合のカテゴリ「葉っぱ」ですね。だから、これが私のカテゴリーです(私はappengineの永続性のためにObjectifyを使用しています):
@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に「leafproperty」がないので、子があるかどうかをどうやって知ることができるかということです。明らかにクエリを実行しますが、isLeafメソッドは同期的に戻る必要がありますが、どうすればrpc呼び出しを行うことができますか?
または、getCategorie()呼び出しでその「リーフ」情報を取得して、実行時にプロパティを埋めることができますが、これはパフォーマンスの問題である可能性があります。
私に何ができる?