Подтвердить что ты не робот

Up() и down() по сравнению с Ext.getCmp()

Я очень смущен тем, что мне нужно использовать для grep-объекта между up() down() и Ext.getCmp(ID).

Для меня легче определить идентификатор объекта и получить объект по Ext.getCmp('ID') и код выглядит более чистым.

Например:

console.log(this.up('panel').up('panel').down('grid'));
console.log(Ext.getCmp('myPanel'));

какой из них лучше для производительности?

4b9b3361

Ответ 1

Существуют серьезные проблемы с использованием идентификаторов и getCmp для поиска ваших компонентов. Основная проблема заключается в том, что вы не можете безопасно повторно использовать компонент, потому что в большинстве случаев разметка создаст HTML-элементы с дублирующимися идентификаторами, что является недопустимым HTML. Кроме того, если у вас есть два компонента с одинаковым идентификатором, вы столкнетесь с неожиданным поведением, которое сложно отследить, потому что структура не получит правильной ссылки на ваши компоненты.

На этом есть несколько сообщений в блогах и на форумах, а также видео Дж. Гарсиа, посвященное этой теме. Предлагаемый способ использования getCmp предназначен только для отладки, перехода на другие методы (вверх, вниз, refs, itemId и ComponentQuery) для готового к выпуску кода.

Ответ 2

Ext.getCmp() использует внутреннюю карту хеша, поэтому она быстро освещается, почти так же быстро, как получение значения в массиве на основе ключа.

.up() и down() реализованы с использованием обхода иерархии компонентов, что является более медленным процессом.

Но up() и down() используют селектора, поэтому они также могут выбирать классы, а не только идентификаторы.

Вам просто нужно помнить, что это разные ситуации, когда вы можете использовать up() или down(), например, когда есть общий обработчик для множества элементов управления или когда компонент, который вы используете, был автоматически сгенерирован по каркасу, поэтому вы не можете дать ему идентификатор самостоятельно.