Javascript-форум (https://javascript.ru/forum/)
-   ExtJS (https://javascript.ru/forum/extjs/)
-   -   Рендеринг динамических компонентов, загружаемых через ajax (https://javascript.ru/forum/extjs/35169-rendering-dinamicheskikh-komponentov-zagruzhaemykh-cherez-ajax.html)

plazzzm 01.02.2013 22:57

Рендеринг динамических компонентов, загружаемых через ajax
 
В общем задача такая: на сайте слева стоит дерево ссылок, при клике вызывается событие
itemclick: function(view,rec,item,index,eventObj){
	var rendTo = Ext.getCmp("mainpanel");
	rendTo.removeAll();
	Ext.Ajax.request({
		url: rec.get("id")+".js",
		success: function(r,o){
			rendTo.add(eval(r.responseText));
		},
		failure: function(r,o){
			rendTo.add(errorPage);
		}
	});
}

Таким образом типа создается компонент динамически из файла *.js и добавляется в mainpanel. вот пример файла a.js:
Ext.create('Ext.Panel', {
            title: 'Заголовок',
            width: 300,
            height: 200
        });

а errorPage - это компонент сообщения об ошибке
var errorPage = Ext.create("Ext.Component", {
	html: "Ошибка загрузки",
	style: "padding: 10px;"
});


Вот. А проблема в том, что загрузка компонента запаздывает на 1 нажатие. То есть я нажал на "ссылку", потом нажал на другую и только тогда грузится предыдущий. Где может быть ошибка?
И вообще какие еще пути есть для вот такой организации динамической загрузки компонентов из других файлов?
Не серчайте, изучаю ExtJS только 2-й день:)

danik.js 01.02.2013 23:14

В ExtJS4 есть же свой асинхронный загрузчик - Ext.define() Ext.requre или чета в этом духе (сам не работал с четверкой)
Для ExtJS3 нужно подключать что-то стороннее, например require.js.
Именно проблема с запооздалым рендерингом скорее всего из-за того, что add() не обновляет view компонента. Нужно наверно вызвать какой-то метод типа refresh() или наподобие. Смотрите документацию http://docs.sencha.com/ext-js/3-4/ http://docs.sencha.com/ext-js/4-1/

plazzzm 01.02.2013 23:29

спасибо! попробую сделать одним из ваших способов :)


Часовой пояс GMT +3, время: 22:32.