Javascript-форум (https://javascript.ru/forum/)
-   ExtJS (https://javascript.ru/forum/extjs/)
-   -   Доступ к элементам родительского окна (https://javascript.ru/forum/extjs/46439-dostup-k-ehlementam-roditelskogo-okna.html)

prihod 09.04.2014 19:26

Доступ к элементам родительского окна
 
Есть окно в котором есть пару textfield элементов , а также кнопка при клике по которой вызывается еще одно окно в котором в котором происходят некие действия после чего нужно как то передать значения в textfield элементы первого окна как это сделать без использования id для textfield элементов

Makarov 14.04.2014 22:48

Мне приходят в голову например следующие способы:
1. "А чо нам библиотека, мы сами разберемся"
Что такое окно в котором лежат эти текстфилды.? По сути большой джаваскриптовый объект. Что мешает нам задать ему свойство? Да ничего, кроме здравого смысла. Берем на уровне окна или другого родительского контейнера определяем переменную mySuperParama и общаемся через нее. Что-то типа
Ext.create('Ext.window.Window', {
title: 'Hello',
layout: 'column'
...
mySuperParam: 'SmthCoolHere' //Через это общаемся
})

В нужных обработчиках обращаемся к этому контейнеру скажем по id (только же к текстфилдам нельзя, правильно? =) ) и переписываем этот mySuperParam. Если надо, какое-нибудь событие зажигаем на то что его переписали.

2. Кроме ext.getCmp есть вагон способов получить компоненты по-другому. Например используя класс Ext.Queryable. Позволяет обращаться к элементам используя селекторы, похожие на цссные. Есть нюансы: класс приватный и сверху большими буквами написано что на его существование полагаться не стоит. То есть в какой-нибудь версии фреймворка он может отвалиться. Но:
- сенча вообще плюет на обратную совместимость, поэтому миграция с одной версии на другую готового продукта - это и так и так головная боль.
- работает на последнем четвертом ексте он точно норм - у нас в компании во внутреннем фреймворке он широко используется.

3. По крайней мере в трешке есть замечательная штука createDelegate, которая позволяет выполнить функцию с тем контекстом с которым ты скажешь. В четверке не видел, но скорее всего тоже есть что-нибудь подобное. С похожей целью часто встречается конфиг scope.

Что использовать - зависит от фантазии и от того что ты хочешь сделать конкретно)


Часовой пояс GMT +3, время: 10:58.