Показать сообщение отдельно
  #2 (permalink)  
Старый 14.04.2014, 22:48
Аватар для Makarov
Профессор
Отправить личное сообщение для Makarov Посмотреть профиль Найти все сообщения от Makarov
 
Регистрация: 08.07.2013
Сообщений: 212

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

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

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

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

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

Последний раз редактировалось Makarov, 14.04.2014 в 22:53.
Ответить с цитированием