Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 22.08.2008, 01:21
Яски вне форума Посмотреть профиль Отправить личное сообщение для Яски Найти все сообщения от Яски
  № 11  
Ответить с цитированием
Яски

блогер
Регистрация: 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;
Теперь при изменении значения у controll1.width
Код:
  controll1.width.value = 100;
Вызовется событие onChanged у всех зависимых контроллов. Также данные будут изменены в XML.


Последний раз редактировалось Яски; 22.08.2008 в 01:26.
Старый 22.08.2008, 01:46
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 12  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Стало только замороченнее, но смысл остался тот же...
изменилось значение -> один контрол разослал событие, тут же поменялось значение у контролов слушателей -> они в свою очередь выслали событие обратно, и так пока 15 секунд не протикает =)
Вообще, на самом деле сейчас это работает так: у контролов есть метод setValue() который ничего не диспатчит и гет/сет value который в сеттере вызывает setValue() и потом сообщает всем подписчикам об изменении. Контролы на события друг друга не подписываются, есть только один подписчик - форма - она и решает нужно ли проапдейтить кого-то еще. Проблема скорее в том, как динамически описать зависимости между компонентами.
т.е. я хочу стороннему разработчику предоставить простые АПИ для создания формы. Общая идея примерно следующая:
Код:
createForm(xml):Form
{ построить форму на основе того, что было в ХМЛе }
Т.е. по любому пользователь АПИ будет решать чего делать с евентами, ему даже знать не обязательно какие именно контролы есть на форме...
__________________
Hell is the possibility of sanity

Старый 22.08.2008, 20:54
Яски вне форума Посмотреть профиль Отправить личное сообщение для Яски Найти все сообщения от Яски
  № 13  
Ответить с цитированием
Яски

блогер
Регистрация: May 2008
Адрес: (0, 10, 185) в локальной системе
Сообщений: 721
Записей в блоге: 6
Извините, я теперь совсем не понимаю, что требуется. Может есть порция кода?

Старый 22.08.2008, 21:23
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 14  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
wvxvw, проблема рекурсии решается банальной проверкой в сеттере if (this._value == value) return;

Старый 22.08.2008, 22:12
Яски вне форума Посмотреть профиль Отправить личное сообщение для Яски Найти все сообщения от Яски
  № 15  
Ответить с цитированием
Яски

блогер
Регистрация: May 2008
Адрес: (0, 10, 185) в локальной системе
Сообщений: 721
Записей в блоге: 6
это костыль, но я даже там, где нет рекурсии стараюсь придерживаться такого подхода.

Старый 22.08.2008, 22:39
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 16  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Цитата:
Сообщение от Яски Посмотреть сообщение
это костыль, но я даже там, где нет рекурсии стараюсь придерживаться такого подхода.
Это не костыль, а нормальное поведение сеттера. Он не должен при установке того же самого значения производить какие-то бессмысленные действия и тратить процессорное время на бесполезные вычисления. Причин, по которым может возникнуть повторная установка значения — огромное количество. Если пытаться учесть все эти возможности повторной установки сеттера, то ничего хорошего из этого не получится, как минимум, будет нагромождение лишнего кода, совершенно ненужного.

Старый 22.08.2008, 22:44
Яски вне форума Посмотреть профиль Отправить личное сообщение для Яски Найти все сообщения от Яски
  № 17  
Ответить с цитированием
Яски

блогер
Регистрация: May 2008
Адрес: (0, 10, 185) в локальной системе
Сообщений: 721
Записей в блоге: 6
Ну да, для сеттера это нормально. Я имел ввиду, что для решения этой задачи это будет костылем - потому что будут выполняться лишние вызовы, лишние проверки - решить задачу можно и нормальным путем. Только вот понять бы в чем состоит эта самая задача - картинка не полная пока.

Старый 22.08.2008, 22:47
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 18  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Здесь нужно создать структуру данных форм и, собственно, формы, принимающие эти структуры и отслеживающие изменения этих структур. И всё.

Старый 24.08.2008, 05:03
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 19  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
__etc:
проблема в том, что как я уже раньше говорил, сеттер может принимать и не примитивные типы в качестве значения, т.е. проверка может оказаться многоярусной =)
А вообще, мне в целом моя структура не нравится... и, я думал, наверняка должно существовать какое-то логически простое решение...
ОК, попробую немного по-другому описать ситуацию: представте общение между двумя ХТМЛ окнами когда первое выступает в качестве opener'a по отношению ко второму. Только в данной ситуации JS вызывает откытие флешевого окна, ну и АПИ нужны более-менее похожие... Т.е. JS передает флешу какой-то набор параметров, исходя из которых флеш формирует новое окно и должен иметь возможность проапдейтить JS когда в этом окне что-то случается. Т.е. я пока вижу 2 варианта:
никак не обрабатывать ввод и отдавать JS как есть. Недостатки - в JS прийдеться парсить кучу ненужной информации + некоторые контролы взаимосвязаны, поэтому иногда JS может получать один за другим сразу несколько апдейтов, когда по-сути ему нужен только последний.

обработать ввод с формы и отдать JS только изменившуюся часть (мне кажется более логичным). Но для этого естесственно, нужна надстройка, которая будет фильтровать общение. А по-скольку все равно существует надстройка, то делать проверки в сеттерах не хочется - мне все равно нужно проверять чего я посылаю...

>> Здесь нужно создать структуру данных форм и, собственно, формы, принимающие эти структуры и отслеживающие изменения этих структур.
Ну, собственно, что я и пытаюсь сделать =) просто получается пока коряво, вот, хочу узнать, как сделать, чтобы было не коряво =)
__________________
Hell is the possibility of sanity

Старый 24.08.2008, 11:28
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 20  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Цитата:
Сообщение от wvxvw Посмотреть сообщение
__etc:
проблема в том, что как я уже раньше говорил, сеттер может принимать и не примитивные типы в качестве значения, т.е. проверка может оказаться многоярусной =)
Точно такая же, только равенство строгое.


Цитата:
Сообщение от wvxvw Посмотреть сообщение
А вообще, мне в целом моя структура не нравится... и, я думал, наверняка должно существовать какое-то логически простое решение...
ОК, попробую немного по-другому описать ситуацию: представте общение между двумя ХТМЛ окнами когда первое выступает в качестве opener'a по отношению ко второму. Только в данной ситуации JS вызывает откытие флешевого окна, ну и АПИ нужны более-менее похожие... Т.е. JS передает флешу какой-то набор параметров, исходя из которых флеш формирует новое окно и должен иметь возможность проапдейтить JS когда в этом окне что-то случается. Т.е. я пока вижу 2 варианта:
никак не обрабатывать ввод и отдавать JS как есть. Недостатки - в JS прийдеться парсить кучу ненужной информации + некоторые контролы взаимосвязаны, поэтому иногда JS может получать один за другим сразу несколько апдейтов, когда по-сути ему нужен только последний.

обработать ввод с формы и отдать JS только изменившуюся часть (мне кажется более логичным). Но для этого естесственно, нужна надстройка, которая будет фильтровать общение. А по-скольку все равно существует надстройка, то делать проверки в сеттерах не хочется - мне все равно нужно проверять чего я посылаю...

>> Здесь нужно создать структуру данных форм и, собственно, формы, принимающие эти структуры и отслеживающие изменения этих структур.
Ну, собственно, что я и пытаюсь сделать =) просто получается пока коряво, вот, хочу узнать, как сделать, чтобы было не коряво =)
Это называется MVC, при измении данных в модели, соответствующие контролы изменят свое состояние и всё. А проверки в сеттерах вообще всегда должны быть.

Создать новую тему Ответ Часовой пояс GMT +4, время: 12:40.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 12:40.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.