Sencha Touch: любое событие, которое запускается после отображения элементов списка.

Простая проблема, но мне не удалось найти возможное решение:

У меня есть список в Sencha Touch с элементами, созданными с помощью свойства itemTpl. Теперь я хочу просмотреть элементы (после того, как они были обработаны!) В DOM и заменить их изображения (используя imgCache для кэширования изображений на устройстве)

Событие Painted списка не помогает, потому что оно запускается до того, как Item-DOM будет визуализирован.

РЕДАКТИРОВАТЬ: Мое текущее решение состоит в том, чтобы переопределить внутренний метод updateListItem Ext.dataview.List, вызвать там исходный updateListItem и добавить туда мои дополнительные функции. Все еще ищу лучшее решение...


person ilir aga    schedule 07.04.2014    source источник


Ответы (1)


Событие load магазина, связанного со списком, — это то, что вам нужно.

[РЕДАКТИРОВАТЬ]

Как вы указываете в комментариях, событие load не обязательно будет вызвано после фактического отображения элементов.

Я думаю, что ваш подход правильный, но вместо того, чтобы добавлять свои функции, почему бы вам не запустить пользовательское событие в конце переопределенного метода, передав сам элемент списка, чтобы вы могли прослушивать это событие в списке ?

Что-то типа:

updateListItem: function(item, index, info) {

    // function body ...

    me.fireEvent('listitemupdate', [item, index]);

}

Это должно сделать ваш код более чистым и пригодным для повторного использования.

person Andrea Casaccia    schedule 07.04.2014
comment
Событие загрузки вызывается после загрузки хранилища... в этот момент DOM списка пуст. - person ilir aga; 07.04.2014
comment
Я собираюсь изучить его, но он работает для меня для аналогичных задач. Вы пробовали? Вы уверены, что компонент списка не синхронизируется до загрузки магазина? - person Andrea Casaccia; 07.04.2014
comment
Да, я пробовал... я только что добавил предупреждение (document.getElementById('DOM_ID_OF_THE_LIST').innerHTML), и это извлекает ошибку нулевой ссылки. Согласно документации, событие store -load- вызывается при успешной загрузке хранилища, а не при отображении DataList... - person ilir aga; 07.04.2014
comment
Я изучу это, мне любопытно, почему это работает для меня, а не для вас. Кстати, я бы предложил ответить на ваш собственный вопрос, а не писать свое решение в виде редактирования. - person Andrea Casaccia; 07.04.2014
comment
Хорошо, спасибо, мне тоже любопытно... А по поводу ответа: Пользователи с репутацией менее 10 не могут ответить на свой вопрос в течение 8 часов после вопроса ;) - person ilir aga; 07.04.2014
comment
удалось ли вам что-то узнать? - person ilir aga; 09.04.2014
comment
Я изучил исходный код Ext.dataview.Dataview, Ext.dataview.List и Ext.data.Store и понимаю, что вы правы в том, что событие загрузки Store не имеет прямого отношения к рендерингу элементов. По какой-то причине это сработало для меня, но мы не должны полагаться на это. Я обновляю свой ответ, предлагая немного лучший подход, начиная с вашего. - person Andrea Casaccia; 26.04.2014
comment
Я приму ваш ответ. Но я не понимаю, почему нет обычного способа сделать это... для меня это функция, которая мне очень нужна, например, если у вас есть список с кэшированными изображениями. Кэширование обычно работает асинхронно, и вам нужно как-то запустить эту загрузку. - person ilir aga; 29.04.2014
comment
Это хороший вопрос для разработчиков Sencha. Я думаю, что это ухудшает производительность, поэтому, вероятно, они не реализовали это. - person Andrea Casaccia; 29.04.2014
comment
Что это может быть причиной. Список в любом случае невыносимо медленный на устройствах Android... но это уже другая история. - person ilir aga; 29.04.2014