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

时间:2020-03-06 14:20:18  来源:igfitidea点击:

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

我在另一个场景中看到了这个问题,在那里我创建了一个包含Combobox的可折叠字段集,在字段集的最小化和最大化上,商店也因相同的原因而消失了。

有人可以在这里帮助我吗,我在这里完全被打击了,我尝试了各种选择,但是没有用。

解决方案

我们是否尝试过FormPanel的doLayout()方法?

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

如果view是私有变量,则在创建时尝试在Combobox配置参数之间提及它。如果没有帮助,我们可以使用类似这样的插件:

view_plugin = {

     init: function(o) {

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

并添加一行

plugins: view_plugin,

到组合框配置。

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

我们需要写:

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

在情况下,请在之前的某个位置定义我的view_pligin代码。或者,我们甚至可以内联它:

field = new ComboBox({plugins:{插件代码});

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

我们也可以在以后随时使用field.setNewStore(store)更改存储。

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

无论如何,我尝试了其他方法,在调试时我发现,尽管我在单击显示按钮时再次创建了该组件,但传递的ID是相同的(这是需要的),但是对于给定的ID,在某种程度上已经有以前的引用可用扩展组件

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

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

我希望这对其他面临类似问题的人有所帮助。
无论如何,谢谢答复。