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'));
какой из них лучше для производительности?
Ответы
Ответ 1
Существуют серьезные проблемы с использованием идентификаторов и getCmp для поиска ваших компонентов. Основная проблема заключается в том, что вы не можете безопасно повторно использовать компонент, потому что в большинстве случаев разметка создаст HTML-элементы с дублирующимися идентификаторами, что является недопустимым HTML. Кроме того, если у вас есть два компонента с одинаковым идентификатором, вы столкнетесь с неожиданным поведением, которое сложно отследить, потому что структура не получит правильной ссылки на ваши компоненты.
На этом есть несколько сообщений в блогах и на форумах, а также видео Дж. Гарсиа, посвященное этой теме. Предлагаемый способ использования getCmp предназначен только для отладки, перехода на другие методы (вверх, вниз, refs, itemId и ComponentQuery) для готового к выпуску кода.
Ответ 2
Ext.getCmp()
использует внутреннюю карту хеша, поэтому она быстро освещается, почти так же быстро, как получение значения в массиве на основе ключа.
.up()
и down()
реализованы с использованием обхода иерархии компонентов, что является более медленным процессом.
Но up()
и down()
используют селектора, поэтому они также могут выбирать классы, а не только идентификаторы.
Вам просто нужно помнить, что это разные ситуации, когда вы можете использовать up()
или down()
, например, когда есть общий обработчик для множества элементов управления или когда компонент, который вы используете, был автоматически сгенерирован по каркасу, поэтому вы не можете дать ему идентификатор самостоятельно.