Extjs 5.1 Событие на Ext.select. Невозможно использовать addListener() для экземпляров Ext.dom.Fly.

Я изучаю EXTjs. Я просматривал это руководство, играя с подсказками оттуда. Когда я обнаружил, что Ext.select('p').on('click', paragraphClicked); вызывает ошибку.

"[E] Ext.dom.Fly.addListener(): Cannot use addListener() on Ext.dom.Fly instances. Please use Ext.get() to retrieve an Ext.dom.Element instance instead."
{msg: "Cannot use addListener() on Ext.dom.Fly instances. Please use Ext.get() to retrieve an Ext.dom.Element instance instead.", sourceMethod: "addListener", sourceClass: "Ext.dom.Fly"}

Я сделал Jsfiddle, где в консоли вы можете найти эту ошибку. А вот исходники:

HTML:

<input type="button" id="myButton" value="My Button" />
<p>first paragraph</p>
<p class="myClass">second paragraph</p>
<p>third one</p>

JS:

Ext.onReady(function() {
 var paragraphClicked = function(e) {
    Ext.get(e.target).highlight();
 };

 Ext.select('p').on('click', paragraphClicked);

});

Пожалуйста, объясните мне, что не так. И как мне привязать событие к элементам, выбранным с помощью Ext.select. Он работает с ExtJS 4 и не работает с 5. Считайте, что я новичок в Ext.js. Любая помощь приветствуется.


person Alexander Arutinyants    schedule 24.12.2014    source источник


Ответы (1)


Ошибка в значительной степени объясняет, что происходит. Вы не можете привязывать события к экземплярам легковесной оболочки Element Ext.dom.Fly, потому что это легковесный объект, который используется повторно и на самом деле действителен только до следующего вызова таких вещей, как Ext.select.

Причина, по которой это работало в ExtJS 4.2, заключается в том, что результат вызова Ext.select() — экземпляр Ext.dom.CompositeElementLite — использовался для работы с классами Ext.dom.Element. Из соображений производительности в ExtJS 5 теперь используется расширение Ext.dom.Fly.

Вместо этого используйте Ext.select('p', true); это создаст экземпляры Ext.dom.CompositeElement, которые не используют облегченную версию.

person Robert Watkins    schedule 24.12.2014
comment
Ух ты! @ Роберт-Уоткинс, ты спас мой день! Благодарю вас! - person Alexander Arutinyants; 24.12.2014