设置远程加载ComboBox的值

时间:2013-04-01 21:55:45

标签: gxt

将GXT 2.2.5与GWT 2.3.0一起使用......

这个让我难过。我有一个RpcProxy检索要在ComboBox上显示的项目列表供用户选择。我还在ComboBox旁边有一个按钮,允许用户创建一个新项目。该按钮打开一个窗口,用户在该窗口中输入信息,然后将新项目添加到数据库中。

我想要发生的是当用户在操作结束时关闭窗口时,ComboBox会自动选择新项目。我通过ID识别新项目,然后使用ComboBox将其传回容器。

首先我尝试简单地设置ComboBox值:

Item item = comboBox.getStore().findModel("id", id);
if (item != null)
{
  comboBox.setValue(item);
}

那没用;据我所知,ComboBox没有重新加载数据,所以新项目不存在可供选择。

所以,接下来我尝试重新加载商店,然后选择:

comboBox.getStore().getLoader().load();
Item item = comboBox.getStore().findModel("id", id);
if (item != null)
{
  comboBox.setValue(item);
}

这也不起作用;该值仍未被选中。

最后,我尝试创建一个临时的LoadListener,以确保在进行选择之前重新加载商店:

LoadListener listener = new LoadListener()
{
  @Override
  public void loaderLoad(LoadEvent le)
  {
    super.loaderLoad(le);
    Item item = comboBox.getStore().findModel("id", id);
    if (item != null)
    {
      comboBox.setValue(item);
    }
  }
};
comboBox.getStore().getLoader().addLoadListener(listener);
comboBox.getStore().getLoader().load();
comboBox.getStore().getLoader().removeLoadListener(listener);

仍然没有快乐。一些检查显示听众甚至没有被调用。

我做错了什么,如何解决?

2 个答案:

答案 0 :(得分:0)

您是否曾尝试将combobox.setUseQueryCache(false);设置为每次都重新加载组合框?

答案 1 :(得分:0)

在storeDataChanged方法中使用商店监听器 https://www.sencha.com/forum/showthread.php?73979-How-to-manually-select-an-item-(combobox)

store.addStoreListener(new StoreListener<BeanModel>(){
        @Override
        public void storeDataChanged(StoreEvent<BeanModel> se) {                
            super.storeDataChanged(se);         

            BeanModel item = se.getStore().findModel("id", id);
            if(item != null){
                //grid.getSelectionModel().select(item, false);
                comboBox.setValue(item);
            }

        }
    });