Я создаю страницу, которая будет динамически генерировать свернутые панели. Когда пользователь расширяет эти панели, он выполнит запрос GET и заполнит эту сгенерированную панель с ответом JSON. Идея состоит в том, чтобы выполнить какую-то ленивую нагрузку или необходимую нагрузку, поскольку объем данных, которые будут показаны первоначально, может стать ошеломляющим.Extjs 5.1.2 Слушатели динамически сгенерированного элемента
Однако я не могу заставить слушателей работать с моими панелями.
Вот код, который генерирует панель с помощью функции нажать кнопку в:
xtype : 'button',
listeners : {
click : function (button, e, eOpts) {
console.log("Click function");
Ext.Ajax.request({
url: 'data/Countries.json',
success: function(response, options) {
var data = Ext.JSON.decode(response.responseText).results;
var container = Ext.getCmp('panelContainer');
container.removeAll();
for (i = 0; i < data.length; i++)
{
container.add({
xtype: 'panel',
title: 'Country Name - ' + data[i].countryName,
collapsible: true,
listeners: {
expand: function() {
Ext.Ajax.request({
url: 'data/CountryData.json',
success: function(response, options) {
var data = Ext.JSON.decode(response.responseText).results;
var me = this;
me.add({
xtype: 'grid',
store: Ext.create('Ext.data.Store',
{
fields : [{
name: 'gdp'
}, {
name: 'rank'
}, {
name: 'founded'
}, {
name: 'governor'
}, {
name: 'notes'
}], //eo fields
data: data.information,
}),// eo store
columns: [
{ text: 'GDP', dataIndex: 'gdp'},
{ text: 'rank', dataIndex: 'rank'},
{ text: 'Date', dataIndex: 'founded'},
{ text: 'name', dataIndex: 'governor'},
{ text: 'Notes', dataIndex: 'notes', flex: 1, cellWrap: true}
], //eo columns
autoLoad: true
});
},
failure: function(response, options) {}
});
},
collapse: function() {
console.log("Collapse function");
var me = this;
me.removeAll();
}
}//eo panel listeners
});//eo cont.add()
}//eo for loop
}, //eo success
failure: function(response, options) {
//HTTP GET request failure
}//eo failure
});//eo Ajax request
} //eo click
}//eo button listeners
Первоначально панели были динамически генерируемым вместе со своими населенными сетками от события щелчка, которые работали отлично. Обертывая создание сетки в слушателе на динамически созданной панели, чтобы создать нагрузку по мере необходимости, я не могу заставить разворачивать или свертывать слушателей.
Обнаружение вокруг, одно из возможных решений, которое я не пробовал, - создать пользовательский компонент и вызвать его через свой тип xtype, а не строить все в строке, что позволит мне определять слушателей там, а не вставлять их в функцию (это лучше также для читаемого и многоразового кода, но я просто пытаюсь добраться до корня проблемы на данный момент).
Есть ли проблема с слушателями на динамически сгенерированных панелях? В чем причина того, что событие запускает коллапс и расширение, не срабатывает?
Спасибо за помощь!
Я только переместил панель в 'container.add () 'в свой собственный компонент и вызвал его через xtype. Я могу получить функцию расширения для запуска, но я не уверен, как получить компонент слушателя (я только догадывался с помощью: var me = this; me.add() '). Кроме того, как ни странно, внешние панели, которые я использовал в качестве контейнеров, внезапно обрушились и имели заголовки, поэтому мне придется также изучить это. – aaron
Offtopic: Я бы порекомендовал вам отделить ваши функции слушателя от представления или, по крайней мере, записать его под определением элементов с помощью listenerScope. Кроме того, этот магазин можно определить под всем классом или в другом файле и просто вызывать по имени и т. Д. Так как он выглядит как спагетти-код. Проверьте эту скрипту для слушателей https://fiddle.sencha.com/#fiddle/1brb – pagep
Конечно, я обязательно их отделим; Я только начал работать, поэтому я не совсем уверен, как установить хранилище в другом файле и передать ему различные наборы данных через конфигурацию сетки или как правильно использовать Listeners; Я уверен, что это проще, чем я думаю. Я вижу, что ваши функции слушателя срабатывают правильно, есть ли причина, по которой мои слушатели не стреляют? Нужно ли использовать listenerScope? Я продолжу тестирование. Благодаря! – aaron