Javascript-форум (https://javascript.ru/forum/)
-   ExtJS (https://javascript.ru/forum/extjs/)
-   -   ComponentLoader, плавающая ошибка (https://javascript.ru/forum/extjs/47447-componentloader-plavayushhaya-oshibka.html)

WalterScott 24.05.2014 16:10

ComponentLoader, плавающая ошибка
 
Имеется модель для хранения объектов с xtype: 'src', то есть картинок, которые нужно вывести.
Ext.define('ItemModel', {
	extend: 'Ext.data.Model',
	idProperty: 'itemModel',
	fields: [{
		name: 'id',
		type: 'int'
	},{
		name: 'xtype',
		type: 'string'
	},{
		name: 'src',
		type: 'string'
	}]
});


С сервера передается такой JSON:
[{"id":0,"xtype":"image","src":"img\/newalbum.png"},{"id":1,"xtype":"image","src":"img\/newalbum1.png"}]

Затем изображения выводятся на панели с помощью loader-а:
var previews = Ext.create('Ext.Panel',{
	layout: 'column',
	height: 500,
	loader:{
	  autoLoad : true,
	  url: 'src/read.php',
	  renderer: "component",
	} 
});


При перезагрузке страницы периодически возникает ошибка:
Код:

TypeError: me.el is null
       

me.container = Ext.get(me.el.dom.parentNode);

в строке 37654 ext-all-dev.js.
При этом страница не отрисовывается.

Периодичность в разных браузерах разная. В IE вообще не возникает, однако появляется, если включить отладчик. В Firefox возникает более-менее часто, но как я заметил, тоже только при включенном firebug-е. В Опере и Хроме происходит постоянно. То, что ошибка проявляется только при включенных средствах разработки, наводит на мысль, что ошибка эта есть всегда, но она не критична, если "средства" её не зафиксировали.

Ошибка возникает только когда в панель добавлен loader.

WalterScott 25.05.2014 14:37

Я изменил способ добавления рисунков на панель. Теперь я использую хранилище с ридером и перебирая полученные элементы добавляю их на панель методом add:
var previews = Ext.create('Ext.Panel',{
	layout: 'column',
	height: 500,
	/*loader:{
	  autoLoad : true,
	  url: 'php/read.php',
	  renderer: "component",
	} */
});

Ext.define('ItemModelStore', {
	extend: 'Ext.data.Store',
	model: 'ItemModel',
	proxy: {
		type: 'ajax',
		url: 'php/read.php',
		reader:{
			type:'json',
			root: 'objs'
		}
	}
});

var itemModelStore = Ext.create('ItemModelStore');
itemModelStore.load(function() {
	itemModelStore.each(function(record){
		previews.add({
			'id': record.get('id'),
			'xtype': 'image',
			'src': record.get('src'),
			'style' : 'padding-left:5px;padding-top:5px;cursor:pointer;',
			listeners: {
				el: {
					click: function() {
						location.href = 'http://yandex.ru?id=' + record.get('id');
					}
				}
			}
		});
	});
});
previews.doLayout();

Этот способ больше подходит, так как проще добавлять обработчики событий и вообще...
Но по сути моей проблемы ничего не изменилось. Та же ошибка время от времени происходит в IE и FF, а в Опере и Хроме страница отрисовывается вообще практически только при первой загрузке. Только я ошибался по поводу того, что ошибка в IE возникает только когда активны "Средства разработки".

WalterScott 04.06.2014 23:02

Проблема решена. Решение тут: http://www.sencha.com/forum/showthre...31#post1047631


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