4

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

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

有人可以在这里帮助我吗,我在这里完全震惊了我尝试了各种选择,但没有任何效果。

4

4 回答 4

2

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

无论如何,我尝试了其他方法,在调试时我发现虽然我在单击显示按钮时再次创建组件,但传递的 ID 是相同的(这是所需的)但不知何故,对于给定的 id,已经有以前的参考可用扩展组件。

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

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

我希望这可以帮助其他面临类似问题的人。无论如何感谢您的回复。

于 2008-09-20T18:22:58.970 回答
0

你需要写:

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

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

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

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

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

于 2008-09-18T16:19:57.200 回答
0

你试过doLayout()的方法FormPanel吗?

于 2008-09-18T10:02:04.083 回答
0

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

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

view_plugin = {

     init: function(o) {

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

并添加一行

plugins: view_plugin,

到组合框配置。

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

于 2008-09-18T10:52:57.033 回答