我已经创建了一个表单面板,并且我正在面板中呈现两个组合框,其中包含一个通过响应处理程序填充的存储。问题是,如果我想要再次渲染面板,它会渲染没有商店的组合框,尽管我正在重建面板。我试着调试以找出原因,令人惊讶的是,尽管对于组合框,存储在调用-comboBox.setStore(存储)时是空的,它检查属性(isRendered)并发现它为真,因此不添加存储,而只是保留现有的存储,它仍然是空的。
我在另一个场景中看到过这个问题,我创建了一个包含Combobox的可折叠字段集,在最小化和最大化字段集上,由于同样的原因,商店消失了。
有没有人能帮帮我,我完全被震住了,我试过各种方法,但都不起作用。
发布于 2008-09-20 18:22:59
谢谢你的评论,实际上我尝试过插件的方法,但我不能完全理解我如何获得商店的句柄,它不是组件的公开元素。
无论如何,我尝试了其他方法,在调试过程中我发现,虽然我在单击显示按钮时再次创建组件,但传递的ID是相同的(这是所需的),但不知何故,对于给定的id,在Ext.Components中已经有了先前的引用。
因此,一个简单的解决方案如下: Component comp = Ext.getCmp(id);if ( comp != null ) comp.destroy( );
这实际上是导致ComboBox的( isRendered( ))属性返回true的引用,不再可用,因此我可以再次正确地看到存储。
我希望这对其他面临类似问题的人有所帮助。无论如何,感谢您的回复。
发布于 2008-09-18 10:02:04
你有没有尝试过FormPanel的doLayout()方法
发布于 2008-09-18 10:52:57
ComboBox.view.setStore()应该会有所帮助。
如果view是一个私有变量,只需在创建时在组合框配置参数之间提及它即可。如果没有帮助,你可以像这样使用插件:
view_plugin = {
init: function(o) {
o.setNewStore = function(newStore) {
this.view.setStore(newStore);
};
}
};并添加一行
plugins: view_plugin,到Combobox配置。
然后,您可以稍后在代码中调用combobox.setNewStore(newStore)。
https://stackoverflow.com/questions/90713
复制相似问题