![]() |
|
||||||||||
|
|||||
|
Регистрация: Apr 2014
Сообщений: 97
|
Итак, я создал класс кнопки с помощью шаблона MVC. Когда наводишь на неё курсор - цвет меняется, когда убираешь - становится прежним. Все работает нормально, просто хочу попросить вам проверить грамотность написания кода и сказать правильно ли я понял принцип работы MVC и правильно ли реализовал в этот примере.
Класс, что собирает вьюшки (хоть она пока одна): package net.freedomstate.elements { /** * ... * @author Scorpion */ import flash.display.*; import net.freedomstate.elements.but.*; public class But extends Sprite { private var _button: View; public function But(valueX: int, valueY: int, valueText: String = "") { _button = new View(valueX, valueY, valueText); addChild(_button); } } } package net.freedomstate.elements.but { /** * ... * @author Scorpion */ import flash.display.*; import flash.events.*; import flash.geom.ColorTransform; import net.freedomstate.elements.TextF; public class View extends Sprite { [Embed(source = "../../../../../img/button.png")] private static const Embed: Class; private var _text: TextF; private var _bitmap: Bitmap; private var _model: Model; private var _controller: Controller; private var _originalColorTransform: ColorTransform; private var _over: Boolean; public function View(valueX: int, valueY: int, valueText: String = "") { _model = new Model(); _controller = new Controller(_model); _model.addEventListener(Event.ENTER_FRAME, setColor); _model.addEventListener(Event.EXIT_FRAME, setOriginalColor); _originalColorTransform = transform.colorTransform; _text = new TextF(0, 0, valueText, "DYNAMIC", "Times New Roman"); _text.autoSize = "center"; _text.mouseEnabled = false; _bitmap = new Embed as Bitmap; _bitmap.width = _text.width + 20; _text.y = 10; _text.x = ( _bitmap.width - _text.width ) / 2; x = valueX; y = valueY; buttonMode = true; addChild(_bitmap); addChild(_text); this.addEventListener(MouseEvent.ROLL_OVER, rollOver); } private function rollOver(e: Event): void { _over = true; _controller.dispatchEvent(new DataEvent(Event.ENTER_FRAME, false, false, String(_over))); } private function setColor(e: DataEvent): void { var newColor: ColorTransform = new ColorTransform(0.95, 0.95, 1.1); this.transform.colorTransform = newColor; this.removeEventListener(MouseEvent.ROLL_OVER, setColor); this.addEventListener(MouseEvent.ROLL_OUT, rollOut); } private function rollOut(e: Event): void { _over = false; _controller.dispatchEvent(new DataEvent(Event.EXIT_FRAME, false, false, String(_over))); } private function setOriginalColor(e: DataEvent): void { transform.colorTransform = _originalColorTransform; } } } package net.freedomstate.elements.but { /** * ... * @author Scorpion */ import flash.events.*; public class Controller extends EventDispatcher { private var _model: Model; public function Controller(rModel: Model): void { _model = rModel; this.addEventListener(Event.ENTER_FRAME, setColor); this.addEventListener(Event.EXIT_FRAME, setOriginalColor); } private function setColor(e: DataEvent): void { _model.dispatchEvent(new DataEvent(Event.ENTER_FRAME, false, false, e.data)); } private function setOriginalColor(e: DataEvent): void { _model.dispatchEvent(new DataEvent(Event.EXIT_FRAME, false, false, e.data)); } } } package net.freedomstate.elements.but { /** * ... * @author Scorpion */ import flash.events.*; public class Model extends EventDispatcher { public function Model(): void { this.addEventListener(Event.ENTER_FRAME, setColor); this.addEventListener(Event.EXIT_FRAME, setOriginalColor); } private function setColor(e: DataEvent): void { if (e.data == "true") dispatchEvent(new DataEvent(Event.ENTER_FRAME)); } private function setOriginalColor(e: DataEvent): void { if (e.data == "false") dispatchEvent(new DataEvent(Event.EXIT_FRAME)); } } } ![]() |
|
|||||
|
[+4 06.05.14]
|
ТС - как то странно разбирать MVC на примере кнопки, кнопка это чистый ВЬЮ, а не триада, в проекте кнопку на МВС не пишут, проект пишут, а не кнопку или ручку.
Пока писал увидел в последнем классе if (e.data == "true") Так не пишут, пишут так if (e.data) или if (!e.data) Во вторых, _model.dispatchEvent(new DataEvent(Event.EXIT_FRAME, false, false, e.data)); - так не делают в контроллере. Контроллер ЗАПУСКАЕТ методы модели/вида, или же работает с сеттерами. В третьих, контроллер НЕ создается во вью, так же как и модель. Модель и ВЬЮ создаются в контроллере, вью получает либо ссылку на модель либо в констуркторе, либо через сеттер. Так же в будущем, примите за основу, что у вас всегда есть BaseModel - база моделей ( главная модель ). В которой создаются ВСЕ остальные, а видам отдается основная модель, так как некоторые виды могут требовать БОЛЕЕ 1 модели. Конечно же можно написать Н сеттеров, но это не так удобно, когда в будущем может понадобится еще какая то модель.
__________________
Марк Tween |
|
|||||
|
[+1 22.07.14]
[+4 12.08.14] [+1 09.02.15] Регистрация: May 2014
Сообщений: 182
|
Цитата:
|
|
|||||
|
Цитата:
|
|
|||||
|
[+4 06.05.14]
|
Цитата:
Цитата:
__________________
Марк Tween |
|
|||||
|
.
|
Что-то вспомнилось...
|
|
|||||
|
Согласен. Я про DataEvent услышал первый раз в этой теме. И судя по документации, DataEvent передаёт данные только в string формате, от того и беда. Но это уже другая тема.
|
![]() |
![]() |
Часовой пояс GMT +4, время: 17:48. |
|
|
« Предыдущая тема | Следующая тема » |
|
|