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