2010-12-22 61 views
1

我有一個偵聽器設置爲'afterrender'的Ext.Panel。回調函數是一個小的ajax代碼,它檢查一個url,抓取它的內容並將其添加到面板。問題是,內容沒有得到妥協。如果我在ajax調用上方使用相同的插入代碼,它就可以工作。這是我的回調函數:Extjs從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' 
    }); 
} 

回答

1

我懷疑回調是沒有得到調用。您可以通過簡單的警報呼叫添加一個failure案例,以檢查它是否不會沿着該路徑行進。

但可能更好,類似於@勞埃德所說的,你應該看看autoLoad config property

0

autoLoad配置是你想要的,如前所述。我想補充說,僅僅爲插入標記做一個logPanel.add({...})並不合適,即使它「有效」。爲此,沒有理由在面板中嵌套面板。如果你正在加載這樣的HTML內容,你最好做logPanel.body.update('content');

0

正如@ bmoeskau所說,autoLoad配置是我們需要的。我花了不少時間才找到正確的語法。所以這裏是一個關於如何用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 
    } 
});