Николай Ланец
1 нояб. 2015 г., 12:50

MODx ExtJS. MODx.add() вместо renderTo

Сегодня на modx.pro было небольшое обсуждение MODx.add() VS renderTo, но из-за неподобающего поведения обеих сторон (а может еще чего-то), топик был скрыт с публикации. Тем не менее там была, на мой взгляд, довольно полезная информация. Вот чтобы ее не терять, публикую здесь. Кому-нибудь наверняка пригодится.
Тема касалась компонента modExtra и правильного рендеринга элементов на страницах админки, типа того, что в modExtra используется renderTo, и что это правильней, чем использовать MODx.add(). Вот итоговая выдержка:
Для начала, закомментрируем renderTo. joxi.ru/nAyz3VMFpO5arZ И обновим страницу компонента. Что мы там видим? Все тот же грид. А почему? А просто потому что на самом деле в modextra-panel-home-div ничто не рендерится. Сам смотри HTML-код. joxi.ru/v29QeZnH1EW52G Можно даже для чистоты эксперимента вообще удалить из шаблона этот див. joxi.ru/DmBXep0uEXpKAP Так почему же все-таки грид рендерится? Обрати внимание на этот блок кода. Используется элемент components. А теперь заглянем в modx.component.js в метод _loadComponents(). Что мы там видим?
...... var cp = Ext.getCmp('modx-content'); ...... cp.add(a);
А теперь заглянем в modx.js в метод add(). Что там мы видим?
..... var ctr = Ext.getCmp('modx-content'); ...... ctr.add(cmp);
Ничего не напоминает?
А теперь возьмем и закомментрируем в modExtra components joxi.ru/p278ek3hyQYYA7, а в контроллере пропишем загрузку компонента именно через renderTo. joxi.ru/E2pv5o9fRd6OrY И что мы получили? Теперь рендерится именно в modextra-panel-home-div, но скролл пропал. joxi.ru/Y2LjLVESK3oDr6
Резюме: элементы рендерить на админ-страницу лучше через метод MODx.add(). Пример.

Добавить комментарий