![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
Второй день сижу и просто думаю ,как лучше сделать...Подскажите пожалуйста, как "лучше" или как более "правильнее", можно сделать то ,что у меня ниже в коде?
package { import flash.display.Sprite ; import flash.events.Event ; public class Main extends Sprite { private var _a : A ; public function Main() { _a = new A( "a" ) ; _a.addEventListener( Event.CHANGE ,aChangeHandler ) ; } private function aChangeHandler( e : Event ) : void { trace( e.type ,_a.str) ; } } } package { import flash.events.EventDispatcher; import flash.events.Event; public class A extends EventDispatcher { private var _str : String ; public function A( str : String ) { _str = str ; _str += "b" ; dispatchEvent( new Event( Event.CHANGE ) ) ; } public function get str() : String { return _str ; } } } |
|
|||||
|
[+1 05.11.12]
Регистрация: Feb 2011
Сообщений: 431
|
А зачем вы это делаете ?
У вас есть Вот объект создался. дальше делайте с ним что хотите.
__________________
Oomph |
|
|||||
|
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
Цитата:
|
|
|||||
|
Регистрация: Feb 2010
Адрес: Город суеты
Сообщений: 191
|
AlexLucas и Akopalipsis, мне кажется вы друг друга не поняли...to Akopalipsis: Конструкторы использовать нужно и полезно, при условии что применять их грамотно. Ваш пример не работает потому что вы диспатчите событие CHANGE в конструкторе, т.е. до того как повесится слушатель _a.addEventListener( Event.CHANGE ,aChangeHandler ), поэтому метод aChangeHandler и не срабатывает Попробуйте так: package { import flash.display.Sprite ; import flash.events.Event ; public class Main extends Sprite { private var _a : A ; public function Main() { _a = new A( "a" ) ; _a.addEventListener( Event.CHANGE ,aChangeHandler ) ; _a.changeStr(); } private function aChangeHandler( e : Event ) : void { trace( e.type ,_a.str) ; } } } package { import flash.events.EventDispatcher; import flash.events.Event; public class A extends EventDispatcher { private var _str : String ; public function A( str : String ) { _str = str ; } public function changeStr():void { _str += "b" ; dispatchEvent( new Event( Event.CHANGE ) ) ; } public function get str() : String { return _str ; } } }
__________________
FlashPress.ru | Blog |
|
|||||
|
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
maincode Спасибо! Это я понимаю, программа на передачи this в конструктор ,переводит фокус на класс А и событие возникает раньше ,чем в Main завершилась инициализация переменной.
Код с ошибкой я намеренно для примера привёл ,но не сумел правильно сформулировать вопрос. Вопрос наверное звучать должен... да так он и должен - как лучше обыграть такую ситуацию! Можно конечно код ,выполнение которого ,вызывает событие ,перенести в отдельный метод и в Main после передачи значения в класс А и завершения инициализации ,вызвать этот метод....... Но вот тут у меня пока не вяжется с правильностью таких действий. я грешу на себя и на отсутствие опыта ,тем более после чтения высказываний опытных людей ,которые то и дело говорят о ОПП! После Вашего совета я прочёл статью о MVC и в моей голове стало только больше туманности. Там говорится ,что событие мыши ,нужно обрабатывать в другом классе ,да и то по событию чендж. О том ,что чтобы код заработал ,нужно событие запускать с аргументом null и выходит ,что это хорошо. Но я уверен ,что еслибы я выложил пример ,работа которого бы была такой же ,но названия бы были не MVC ,то мне бы сказали ,что это не правильно)... Но это я говорю не для того ,что бы сказать ,что кто то не так делает ,а для того ,чтобы по возможности вы понимали .какая каша у меня в голове и давали соответствующие ответы. И возвращаясь к теме - как лучше это сделать? Добавлено через 4 минуты Цитата:
Добавлено через 1 час 1 минуту Вот наверное я и приблизился к моменту ,который расставит в моей голове ,все выше сказанное ,на свои места. Но для этого мне нужно понять вот что...Почему в Main не срабатывает событие? package { import flash.display.Sprite; import flash.events.Event; public class Main extends Sprite { private var _a : A ; private var _b : B ; public function Main():void { _a = new A( ) ; _a.addEventListener( Event.CHANGE , changeHandler ) ; _b = new B( this ); } private function changeHandler( e : Event ) : void { trace( e.type ) ; } } } package { import flash.events.Event; import flash.events.EventDispatcher ; public class A extends EventDispatcher{ public function A( ) { } public function go():void { trace( "i - A" ) ; dispatchEvent( new Event ( Event.CHANGE ) ) ; } } } Последний раз редактировалось Akopalipsis; 19.06.2013 в 18:03. |
|
|||||
|
[+1 25.10.13]
[+4 18.03.14] |
а где у вас вызов метода с диспатч?
|
|
|||||
|
Регистрация: Feb 2010
Адрес: Город суеты
Сообщений: 191
|
У вас два объекта класса A, один создается в Main, второй - в классе B. Слушателя добавляете в Main-е, а метод go вызываете в классе B.
Наверно как так: package { import flash.display.Sprite; import flash.events.Event; public class Main extends Sprite { private var _a : A ; private var _b : B ; public function Main():void { _a = new A( ) ; _a.addEventListener( Event.CHANGE , changeHandler ) ; _b = new B( _a ); } private function changeHandler( e : Event ) : void { trace( e.type ) ; } } }
__________________
FlashPress.ru | Blog |
|
|||||
|
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
Цитата:
Добавлено через 5 минут maincode Спасибо! значит я неправильно понимаю очень важный момент...Опять читать!) Добавлено через 14 минут maincode Спасибо ещё раз!!! Хорошо что я хоть добавил в конце вышеизложенного сообщения строку о "каше в голове". А так бы мои слова, как осквернения ОПП бы выглядели))) Это же разные экземпляры))))))))) Последний раз редактировалось Akopalipsis; 19.06.2013 в 18:59. |
|
|||||
|
[+1 25.10.13]
[+4 18.03.14] |
Зачем учить так писать код? Это же откладывается в голове хуже каши.
Есть отличные видеоуроки artempro.blogspot.ru |
|
|||||
|
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
Цитата:
Цитата:
|
![]() |
![]() |
Часовой пояс GMT +4, время: 23:40. |
|
|
« Предыдущая тема | Следующая тема » |
|
|