2

我创建了一个与 Ext.Template 捆绑在一起的面板。此面板包含在另一个面板中,该面板开始其生命折叠。

id:             'myPanel',
title:          'My Title',
layout:         'border',
collapsible:    true,
collapsed:      true,
hideCollapseTool:true,
bodyBorder:     false,
height:         300,
bodyStyle:      'background:#F9F9F9;',
items: [{
    id:         'myDisplayPanel',
    bodyStyle:  'background:transparent;',
    width:      300,
    border:     false,
    margins:    '5 5 5 5',
    region:     'west',
    tpl:        new Ext.Template([
                    'some template'
                ])
},
{
    id:         'myForm',
    xtype:      'form',
    bodyStyle:  'background:transparent;',
    border:     false,
    margins:    '5 5 5 5',
    region:     'center',
[...]

该模板面板应该作为相邻网格中行选择的结果而更新。但是我第一次调用 .update(data); 时遇到错误。在 myDisplayPanel 上,因为它不包含正文元素。

myGridSelectionModel: new Ext.grid.RowSelectionModel({
    singleselect: true,
    listeners: {
        rowselect: function(sm,rowIdx,r) {
            Ext.getCmp('myDisplayPanel').update(r.data);
            Ext.getCmp('myPanel').expand(true);
        }
    }
}),

当 Ext 尝试以 myDisplayPanel.body 作为第一个参数调用 template.overwrite 函数时,对 myDisplayPanel.update() 的调用会导致错误。

function(b,a,c){b=Ext.getDom(b);b.innerHTML=this.applyTemplate(a);

是否有可能以某种方式强制 Ext 在显示此隐藏面板之前为其生成一个正文元素?我试图在更新之前扩展元素,但这现在已经生效......

4

3 回答 3

1

我知道这个线程已经 2 个月大了,所以我不确定你是否找到了解决方案。但是,我只是遇到了同样的事情,并在寻找答案时遇到了您的帖子。这就是我最终做的事情:

您当前正在运行 panel.update(content) 的地方,试试这个:

if(panel.rendered) panel.update(content);
else panel.contentToLoad = content;

设置要运行的渲染事件的侦听器:

if(this.contentToLoad) panel.update(this.contentToLoad);

这样,如果面板没有被渲染,它会将内容存储在某个地方,并且渲染侦听器将加载面板渲染时的任何内容。

于 2010-10-11T16:55:39.517 回答
0

默认情况下,折叠面板(以及通常隐藏的容器)在它们第一次变得可见之前不会对其子项进行布局。您可以通过在折叠容器上设置forceLayout: true来覆盖此行为。顾名思义,这将强制容器执行其布局,无论它是否可见。请注意,在您的情况下,这将是需要此配置的 myPanel,而不是 myDisplayPanel。

于 2010-08-15T18:59:36.503 回答
0

您可以尝试 Panel 的elements配置,文档中的配置是“在呈现面板时要初始化的以逗号分隔的面板元素列表”。例如,

elements: ['header','body']

然而,它已经默认为“body”,所以当你更新它时,可能只是面板还没有真正呈现。尝试颠倒调用的顺序,以便首先展开容器(应该强制子面板呈现)然后更新它。

于 2010-07-16T15:58:42.340 回答