我正在使用GWT 2.1的CellBrowser和自定义TreeViewModel.TreeViewModel又使用a AsyncDataProvider来动态获取数据.这一切都很好用 - 当用户点击节点时,我的AsyncDataProvider通过RPC获取结果,并且CellBrowser尽职尽责地显示它们.
我觉得无法解决这个问题很愚蠢,但我怎么能以编程方式告诉CellBrowser重新加载(和显示)数据呢?我猜我需要以某种方式为我的根节点获取AsyncDataProvider的句柄,然后在其上调用updateRowData()和updateRowCount(),但我没有看到查询浏览器(或其模型)的明显方法对于根DataProvider.
我想我可以在我的AsyncDataProvider构造函数中添加代码来查找null参数,并通过这种方式识别"嘿,我是根"并在某处存储引用,但这似乎是hackish.当然有更好的方法来做到这一点.
在这里抛弃这么多代码的道歉,但我不知道如何将其简化为更简单的东西并仍然提供足够的上下文.
我的AsyncDataProvider:
private static class CategoryDataProvider extends AsyncDataProvider<Category>
{
private Category selectedCategory;
private CategoryDataProvider(Category selectedCategory)
{
this.selectedCategory = selectedCategory;
}
@Override
protected void onRangeChanged(HasData<Category> display)
{
new AsyncCall<List<Category>>()
{
@Override
protected void callService(AsyncCallback<List<Category>> cb)
{
// default to root
String categoryId = "-1";
if (selectedCategory != null)
{
categoryId = selectedCategory.getCategoryId();
}
// when a category is clicked, fetch its child categories
service.getCategoriesForParent(categoryId, cb);
}
@Override
public void …Run Code Online (Sandbox Code Playgroud)