在Gwt-Ext中重新渲染combox存储

时间:2008-09-18 07:28:45

标签: forms combobox gwt-ext

我已经创建了一个表单面板,我在面板中渲染了几个组合框,其中一个商店通过响应处理程序填充。 问题,如果我想再次渲染面板,它渲染没有商店的组合框,虽然我正在重新构建面板。 我试图调试以找出原因并且令人惊讶地虽然对于组合框,Store在调用时为null - comboBox.setStore(store)它检查属性(isRendered)并发现它为true,因此不添加商店但只保留现有的商店仍为空。

我在另一个sceaio中看到了这个问题,我创建了一个包含Combobox的可折叠字段集,在最小化和最大化字段集时,商店因同样的原因而消失。

有人可以在这里帮助我,我完全被击中了,我尝试了各种选择,但没有任何作用。

4 个答案:

答案 0 :(得分:2)

感谢您的评论,实际上我尝试了插件方法,但完全无法理解它如何获得商店的句柄,而不是组件的公开元素。

无论如何我尝试了别的东西,而调试我发现虽然我在点击show按钮时再次创建组件,但传递的ID是相同的(这是期望的)但不知何故,对于给定的id,已经有了之前的参考可在Ext.Components中找到。

因此,一个简单的解决方案如下: 组件comp = Ext.getCmp(id); if(comp!= null)    comp.destroy();

这实际上作为引用导致ComboBox的(isRendered()属性返回true的引用不再可用,因此我可以再次正确地看到商店。

我希望这有助于其他面临类似问题的人。 不管怎样,谢谢回复。

答案 1 :(得分:0)

您是否尝试了doLayout()的{​​{1}}方法?

答案 2 :(得分:0)

ComboBox.view.setStore()应该有帮助。

如果view是私有变量,请在创建时尝试在Combobox配置参数之间提及它。如果它没有用 - 你可以使用这样的插件:

view_plugin = {

     init: function(o) {

          o.setNewStore = function(newStore) {
              this.view.setStore(newStore);
          };
     }
};

并添加一行

plugins: view_plugin,

到Combobox配置。

然后你可以在代码中稍后调用combobox.setNewStore(newStore)。

答案 3 :(得分:0)

你需要写:

field = new ComboBox({plugins: view_plugin});

在你的情况下,并在之前的某个地方定义我的view_pligin代码。或者您甚至可以将其合并为内联:

field = new ComboBox({plugins: { code of plugin });

在插件内部,所有私有属性和方法都是可访问/可更改的。

您也可以稍后使用field.setNewStore(store)更改商店。

相关问题