![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
package { import flash.events.Event; import flash.events.EventDispatcher; import flash.events.IEventDispatcher; /** * ... * @author gloomybrain */ [Event(name = "change", type = "flash.events.Event")] public class DataHolder { private static const _dispatcher:EventDispatcher = new EventDispatcher(); private static var _data:String = ""; // или XML с данными, или еще что-то public static function get data():String { return DataHolder._data; } public static function set data(value:String):void { DataHolder._data = value; DataHolder.dispatchEvent(new Event(Event.CHANGE)); } // Реализация интерфейса IEventDispatcher // чтобы можно было диспатчить события и добавлять слушателей // (делаем вид. что события дипатчатся классом, а не объектом) public static function dispatchEvent(event:Event):Boolean { return DataHolder._dispatcher.dispatchEvent(event); } public static function addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void { DataHolder._dispatcher.addEventListener(type, listener, useCapture, priority, useWeakReference); } public static function hasEventListener(type:String):Boolean { return DataHolder._dispatcher.hasEventListener(type); } public static function removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void { DataHolder._dispatcher.removeEventListener(type, listener, useCapture); } public static function willTrigger(type:String):Boolean { return DataHolder._dispatcher.willTrigger(type); } } } package { import flash.display.Sprite; import flash.events.Event; /** * ... * @author gloomybrain */ public class TextContainer extends Sprite { public function TextContainer() { super(); DataHolder.addEventListener(Event.CHANGE, updateContent); this.updateContent(); } protected function updateContent(event:Event = null):void { /* * В теле данного метода получаем ссылки на все нужные текстовые поля * и заменяем их содержимое на данные из DataHolder * * Данный класс является базовым, все визуальные классы с текстовыми полями * должны наследоваться от него * * И * * оверрайдить метод updateContent нужным образом * (т.к. текстовые поля везде разные) * */ } } }
__________________
...вселенская грусть Последний раз редактировалось gloomyBrain; 20.10.2010 в 15:32. |
|
|||||
|
Глум, в таком подходе тогда лучше создать базовый класс для текстовых полей, которые сами себе будут иметь uid чтобы обновится. Ну и какой-нибудь TextFields.register для текстов из IDE.
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
|
уф, а не проще ли статик массив в который классы будут кидать свои текстфилды с неким ИД, далее при изменении языка бежим по массиву, смотрим ИД и меняем содержимое, имхо просто и надежно и не совсем оопно, зато никакого гемора с событиями и кучей обработчиков.
|
|
|||||
|
@Psycho Tiger
Чем лучше-то? Приведенный подход предполагает создание некоторой панельки с несколькими текстовыми полями, расширяющей TextContainer. При любом изменении данных текст в панельке обновится в соответствии с updateContent. Никаких id и register (функционал register возложен на подписку в базовом классе) тут не нужно. По-моему писать длииииинную функцию с обходом всех полей неверно, ибо при изменении одной панельки все изменения (сори за тавтологию) останутся именно в ее классе, а не где-то еще
__________________
...вселенская грусть |
|
|||||
|
Регистрация: Apr 2010
Сообщений: 219
|
nOobCrafter, проще не значит лучше
|
|
|||||
|
сейчас стоит подобная задача.
думаю сделать так: наверху создаем класс, который будет регистрить , убирать текстифилды, подлежайщие апдейту, апдейтить их. далее в рантайме динамически создаваемые объекты просто диспатчат с баблингом события добавления/удаления текстфилда с ссылкой на этот самый текстфилд. наверху (тот же мэйндок) ловит события и в хэндлере добавляются / убираются и апдейтяца. в то же время класс-апдейтер подписан на изменения языковых данных и просто пробегаясь по существующему массиву меняет текст
__________________
http://cleptoman.free-lance.ru achivements: дважды благословлен на воровство. осеяный благодатью |
|
|||||
|
[+4 06.05.14]
|
nOobCrafter согласен, так и делать буду, тока потому что остальных ораторов не понял либо, просто показались слишком длинные методы.
package flash.utils { import flash.text.TextField; public class IGlobal { public static var _arr:Array = []; public function IGlobal() { } public static function SET(t:TextField):void { _arr.push(t); } public static function GET():Array { return _arr; } } } Но чей то странность какая то вышла, дубликаты какие то пошли.... В данном случае писал на фрейме клипа библиотечного подключение класса, ибо там генерятся 4 поля, так у меня аж 10 показало)))) |
|
|||||
|
Регистрация: Jan 2009
Адрес: Петерсбург
Сообщений: 1,882
|
Советовали-советовали, а он ещё и в кадрах пишет оказывается =)
|
|
|||||
|
вообщем то у cleptoman расширенный и отлаженный вариант того что я предложил. Класс-манагер который следит за полями, но так или иначе все ссылки на нужные поля у него есть. +100500
in4core любой мувик это класс, до его св-в и детей можно программно достучаться, а далее ивенты \ статик методы |
![]() |
![]() |
Часовой пояс GMT +4, время: 07:22. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|