Extjs Загрузка содержимого панели из ajax - PullRequest
1 голос
/ 22 декабря 2010

У меня есть Ext.Panel с прослушивателем, установленным на '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'
    });
}

Ответы [ 4 ]

1 голос
/ 22 декабря 2010

Я подозреваю, что обратный вызов не вызывается. Вы можете добавить случай failure с простым вызовом, чтобы проверить, что он не идет по этому пути.

Однако, вероятно, лучше, подобно тому, что сказал @Lloyd, вы должны взглянуть на autoLoad config config .

1 голос
/ 22 декабря 2010

Вам может потребоваться вызвать doLayout () на панели.Однако проверьте Ext.Updater:

http://dev.sencha.com/deploy/dev/docs/?class=Ext.Updater

Панели имеют это автоматически, например:

var panel = new Ext.Panel({

});

panel.body.load(...);
panel.body.update(...);
0 голосов
/ 23 октября 2013

Как говорит @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
    }
});
0 голосов
/ 22 декабря 2010

Конфигурация autoLoad - это то, что вы хотите, как уже упоминалось. Я хотел добавить, что делать logPanel.add({...}) просто для вставки разметки не уместно, даже если это «работает». Для этого нет причин вкладывать панель в панель. Если вы загружаете HTML-контент таким образом, вы бы предпочли logPanel.body.update('content');.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...