Javascript ExtJS面板附加html

Javascript ExtJS面板附加html,javascript,dom,extjs,extjs4,Javascript,Dom,Extjs,Extjs4,我使用这个配置对象创建了一个extjs4面板 { title : 'Messages', region : 'north', height : 200, minSize : 75, maxSize : 250, cmargins : '0 0 5 0', html : '<i>Chat started on ' + Ext.Date.format(dt, EI.datePattern) + '</i>' }

我使用这个配置对象创建了一个extjs4面板

{ 
    title : 'Messages',
    region : 'north',
    height : 200,
    minSize : 75,
    maxSize : 250,
    cmargins : '0 0 5 0',
    html : '<i>Chat started on ' +  Ext.Date.format(dt, EI.datePattern)  + '</i>'
}

但我有时看到
。body
未设置!!所以我不能执行上面的代码。正确的方法是什么?

尝试使用panel.getTargetEl()

来源:

getTargetEl: function() {
    var me = this;
    return me.body || me.protoBody || me.frameBody || me.el;
}

尝试使用panel.getTargetEl()

来源:

getTargetEl: function() {
    var me = this;
    return me.body || me.protoBody || me.frameBody || me.el;
}

面板的主体元素在面板的渲染事件激发后才可用。这对于任何组件的
childEls
config下列出的所有元素都是相同的

渲染元素有几种不同的方式。这不是一个全面的列表

  • 如果组件是容器的子项,则在父容器渲染时将渲染该组件。使用
    deferredRender
    config时,使用卡片布局(如选项卡面板)的容器除外

  • 如果组件不是容器的子组件,但它使用的是
    renderTo
    config,则在构建时将呈现该组件,即使它是隐藏的

  • 如果非浮动组件正在使用
    autoRender
    config,则该组件将在第一次显示时进行渲染,例如使用
    panel.show()
    。如果它同时使用了
    autoRender
    autoShow
    ,那么它将在构建时进行渲染

  • 浮动组件(如windows)默认为
    autoShow:false
    autoRender:true
    ,因此它们在调用
    win.show()
    之前不会渲染。如果将
    autoShow
    设置为true,它将在创建时渲染

  • 使用
    renderTo
    config的浮动组件将在创建时进行渲染并保持隐藏,除非如上所述也使用
    autoShow

  • 听起来你有一个面板是窗口的子面板,对吗?要使该面板立即渲染但保持隐藏,请在父窗口上设置
    renderTo:Ext.getBody()

    或者,您仍然可以在呈现面板之前访问
    panel.html
    属性,任何更改都将在显示窗口时反映出来。因此,如果您需要访问内部内容,但无法保证已呈现面板,则可以执行以下操作:

    if (panel.body) {
        panel.body.insertHtml("beforeEnd", chatHtml);
    } else {
        panel.html += chatHtml;
    }
    

    最后一件事。如果设置面板的
    html
    配置,然后对其进行渲染,则在原始内容之后会有一个名为
    clearEl
    的额外div。渲染后调用
    panel.body.insertHtml()
    将把新的HTML放在这个div之后。这对您来说可能是个问题,也可能不是问题,但我想还是要提到它。

    面板的body元素直到面板的渲染事件触发后才可用。这对于任何组件的
    childEls
    config下列出的所有元素都是相同的

    渲染元素有几种不同的方式。这不是一个全面的列表

  • 如果组件是容器的子项,则在父容器渲染时将渲染该组件。使用
    deferredRender
    config时,使用卡片布局(如选项卡面板)的容器除外

  • 如果组件不是容器的子组件,但它使用的是
    renderTo
    config,则在构建时将呈现该组件,即使它是隐藏的

  • 如果非浮动组件正在使用
    autoRender
    config,则该组件将在第一次显示时进行渲染,例如使用
    panel.show()
    。如果它同时使用了
    autoRender
    autoShow
    ,那么它将在构建时进行渲染

  • 浮动组件(如windows)默认为
    autoShow:false
    autoRender:true
    ,因此它们在调用
    win.show()
    之前不会渲染。如果将
    autoShow
    设置为true,它将在创建时渲染

  • 使用
    renderTo
    config的浮动组件将在创建时进行渲染并保持隐藏,除非如上所述也使用
    autoShow

  • 听起来你有一个面板是窗口的子面板,对吗?要使该面板立即渲染但保持隐藏,请在父窗口上设置
    renderTo:Ext.getBody()

    或者,您仍然可以在呈现面板之前访问
    panel.html
    属性,任何更改都将在显示窗口时反映出来。因此,如果您需要访问内部内容,但无法保证已呈现面板,则可以执行以下操作:

    if (panel.body) {
        panel.body.insertHtml("beforeEnd", chatHtml);
    } else {
        panel.html += chatHtml;
    }
    

    最后一件事。如果设置面板的
    html
    配置,然后对其进行渲染,则在原始内容之后会有一个名为
    clearEl
    的额外div。渲染后调用
    panel.body.insertHtml()
    将在该div之后放置新的HTML。这可能对您来说是个问题,也可能不是问题,但我想还是要提到它。

    panel.body在渲染事件触发之前不可用。你什么时候打电话给insertHtml?@EricCook你说得对。我通过在容器窗口中添加一个.show()来修复它。你能告诉我如何手动渲染面板或容器窗口吗?我给出了一个更完整的解释作为答案。希望这能满足您的需要,但是如果我遗漏了什么,请告诉我,这样我可以进一步缩小范围。panel.body在渲染事件触发之前不可用。你什么时候打电话给insertHtml?@EricCook你说得对。我通过在容器窗口中添加一个.show()来修复它。你能告诉我如何手动渲染面板或容器窗口吗?我给出了一个更完整的解释作为答案。希望这能满足你的需要,但是如果我遗漏了什么,请告诉我,这样我可以缩小范围。额外的div元素非常有用。额外的div元素非常有用。