Extjs从ajax加载面板内容

Extjs从ajax加载面板内容,extjs,Extjs,我有一个外部面板,其侦听器设置为“afterrender”。回调函数是一个小的ajax代码,它检查url,获取其内容并将其添加到面板中。问题是,内容没有被插入。如果我在ajax调用的正上方使用相同的插入代码,它就可以工作。这是我的回调函数: 不工作: function afterrenderCallback () { // This does not work var logPanel = Ext.getCmp('aP_ServerLogs'); Ext.Ajax.re

我有一个外部面板,其侦听器设置为“afterrender”。回调函数是一个小的ajax代码,它检查url,获取其内容并将其添加到面板中。问题是,内容没有被插入。如果我在ajax调用的正上方使用相同的插入代码,它就可以工作。这是我的回调函数:

不工作:

function afterrenderCallback () {
    //  This does not work
    var logPanel = Ext.getCmp('aP_ServerLogs');
    Ext.Ajax.request({
        url: AP_ROOT_URL + '/index.php?r=server/logs',
        success: function (r) {
                logPanel.add({
                        html: 'dummy html i don\'t care about the response'
                });
        }
    });
}
工作:

function afterrenderCallback () {
    //  This does work
    var logPanel = Ext.getCmp('aP_ServerLogs');
    logPanel.add({
          html: 'dummy html i don\'t care about the response'
    });
}

您可能需要在面板上调用doLayout()。但是,请查看外部更新程序:

面板会自动进行此操作,例如:

var panel = new Ext.Panel({

});

panel.body.load(...);
panel.body.update(...);

我怀疑回拨电话没人打。您可以添加一个
故障
案例,并通过一个简单的警报调用来检查它是否没有进入该路径


尽管可能更好,与@Lloyd所说的类似,您应该查看。

自动加载配置是您想要的,如前所述。我想补充一点,做一个
logPanel.add({…})
仅仅插入标记是不合适的,即使它“有效”。没有理由为此在面板中嵌套面板。如果像这样加载HTML内容,最好执行
logPanel.body.update('content')

正如@bmoeskau所说的,
自动加载
配置是我们所需要的。我花了很长时间才找到正确的语法。下面是一个关于如何使用ajax内容定义此类面板的示例:

Ext.define('MyApp.view.aP_ServerLogs', {
    extend  : 'Ext.panel.Panel',
    id: 'aP_ServerLogs',
    loader: {
        url: AP_ROOT_URL + '/index.php?r=server/logs',
        autoLoad: true
    }
});