![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
блогер
Регистрация: May 2008
Адрес: (0, 10, 185) в локальной системе
Сообщений: 721
Записей в блоге: 6
|
В таком случае такая схема:
Объявляем новый класс - Data, т.е. данные, которые должны быть общими у нескольких контроллов. При создании этого объекта в него передается XML, в котором будет зеркалиться его значение. В контроллы передается этот объект данных. Если контроллу нужно реагировать на изменение данных, он подписывается на событие CHANGED у этого экземпляра данных. class Controll {
function set width(value:Data) {
value.addEventListener(CHANGED, onChange);
}
funtrion onChange() {
redraw();
}
}
var controll1:Controll = new Controll(); controll1.width = new Data(); var controll2:Controll = new Controll(); controll2.width = controll1.width; Вызовется событие onChanged у всех зависимых контроллов. Также данные будут изменены в XML. Последний раз редактировалось Яски; 22.08.2008 в 01:26. |
|
|||||
|
Modus ponens
|
Стало только замороченнее, но смысл остался тот же...
изменилось значение -> один контрол разослал событие, тут же поменялось значение у контролов слушателей -> они в свою очередь выслали событие обратно, и так пока 15 секунд не протикает =) Вообще, на самом деле сейчас это работает так: у контролов есть метод setValue() который ничего не диспатчит и гет/сет value который в сеттере вызывает setValue() и потом сообщает всем подписчикам об изменении. Контролы на события друг друга не подписываются, есть только один подписчик - форма - она и решает нужно ли проапдейтить кого-то еще. Проблема скорее в том, как динамически описать зависимости между компонентами. т.е. я хочу стороннему разработчику предоставить простые АПИ для создания формы. Общая идея примерно следующая: Т.е. по любому пользователь АПИ будет решать чего делать с евентами, ему даже знать не обязательно какие именно контролы есть на форме...
__________________
Hell is the possibility of sanity |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
wvxvw, проблема рекурсии решается банальной проверкой в сеттере if (this._value == value) return;
|
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Это не костыль, а нормальное поведение сеттера. Он не должен при установке того же самого значения производить какие-то бессмысленные действия и тратить процессорное время на бесполезные вычисления. Причин, по которым может возникнуть повторная установка значения — огромное количество. Если пытаться учесть все эти возможности повторной установки сеттера, то ничего хорошего из этого не получится, как минимум, будет нагромождение лишнего кода, совершенно ненужного.
|
|
|||||
|
блогер
Регистрация: May 2008
Адрес: (0, 10, 185) в локальной системе
Сообщений: 721
Записей в блоге: 6
|
Ну да, для сеттера это нормально. Я имел ввиду, что для решения этой задачи это будет костылем - потому что будут выполняться лишние вызовы, лишние проверки - решить задачу можно и нормальным путем. Только вот понять бы в чем состоит эта самая задача - картинка не полная пока.
|
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Здесь нужно создать структуру данных форм и, собственно, формы, принимающие эти структуры и отслеживающие изменения этих структур. И всё.
|
|
|||||
|
Modus ponens
|
__etc:
проблема в том, что как я уже раньше говорил, сеттер может принимать и не примитивные типы в качестве значения, т.е. проверка может оказаться многоярусной =) А вообще, мне в целом моя структура не нравится... и, я думал, наверняка должно существовать какое-то логически простое решение... ОК, попробую немного по-другому описать ситуацию: представте общение между двумя ХТМЛ окнами когда первое выступает в качестве opener'a по отношению ко второму. Только в данной ситуации JS вызывает откытие флешевого окна, ну и АПИ нужны более-менее похожие... Т.е. JS передает флешу какой-то набор параметров, исходя из которых флеш формирует новое окно и должен иметь возможность проапдейтить JS когда в этом окне что-то случается. Т.е. я пока вижу 2 варианта: никак не обрабатывать ввод и отдавать JS как есть. Недостатки - в JS прийдеться парсить кучу ненужной информации + некоторые контролы взаимосвязаны, поэтому иногда JS может получать один за другим сразу несколько апдейтов, когда по-сути ему нужен только последний. обработать ввод с формы и отдать JS только изменившуюся часть (мне кажется более логичным). Но для этого естесственно, нужна надстройка, которая будет фильтровать общение. А по-скольку все равно существует надстройка, то делать проверки в сеттерах не хочется - мне все равно нужно проверять чего я посылаю... >> Здесь нужно создать структуру данных форм и, собственно, формы, принимающие эти структуры и отслеживающие изменения этих структур. Ну, собственно, что я и пытаюсь сделать =) просто получается пока коряво, вот, хочу узнать, как сделать, чтобы было не коряво =)
__________________
Hell is the possibility of sanity |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Цитата:
Цитата:
|
![]() |
![]() |
Часовой пояс GMT +4, время: 12:46. |
|
|
« Предыдущая тема | Следующая тема » |
|
|