![]() |
|
||||||||||
|
|||||
|
Спасибо, начинаю понимать.
1) Я так понимаю в контроллер всегда передаётся DisplayObjectContainer, говорящий куда пихнуть вьюшку? б) я имею ввиду что раз контроллер создаёт и вьюшку, и модель то он сохраняет их ссылки. Ну в принципе вопрос риторический, не сохранять было бы глупо. в) а как можно ссылаться снаружи на то, что было создано внутри? Диспатчится событие и на неё начинают ссылаться? г) теперь понял что это, думал о другом =) Такс, применив свои знания набросал это в коде, посмотри пожалуйста: Базовый класс: package { import flash.display.Sprite; public class JustMain extends Sprite { public function JustMain() { super(); var controller:Controller = new Controller(this); } } } package { import flash.display.DisplayObjectContainer; import flash.events.Event; import flash.events.MouseEvent; public class Controller { private var _model:Model = new Model(); private var _viewer:Viewer = new Viewer(); private var _container:DisplayObjectContainer; public function Controller(container:DisplayObjectContainer) { _container = container; init(); } private function init():void { _container.addChild(_viewer); _model.addEventListener(Event.CHANGE, onModelChange); _viewer.addEventListener(MouseEvent.CLICK, onViewerClick); } private function onViewerClick(e:MouseEvent):void { _model.change(Math.random() * 400, Math.random() * 400); } private function onModelChange(e:Event):void { _viewer.updatePositions(_model.x, _model.y); } } } package { import flash.events.Event; import flash.events.EventDispatcher; import flash.events.IEventDispatcher; public class Model extends EventDispatcher { //no getters/setters, just example public var x:Number = 0; public var y:Number = 0; public function Model() { super(null); } public function change(x:Number, y:Number):void { this.x = x; this.y = y; super.dispatchEvent(new Event(Event.CHANGE)); } } } package { import flash.display.Sprite; import flash.events.MouseEvent; public class Viewer extends Sprite { public function Viewer() { super(); init(); } private function init():void { var someSprite:Sprite = new Sprite(); someSprite.graphics.beginFill(0); someSprite.graphics.drawCircle(0, 0, 50); someSprite.graphics.endFill(); super.addChild(someSprite); someSprite.addEventListener(MouseEvent.CLICK, super.dispatchEvent); } public function updatePositions(x:Number,y:Number):void { this.x = x; this.y = y; } } } Возникает отсюда уже несколько вопросов: 1) Чтобы было совсем идеально-правильное MVC на твой взгляд, что нужно добавить, а что убрать? 2) Наверное, на столь простом примере не видно - но зачем такой полёт данных? Ведь если контроллер изменяет все данные, а моделька их всего лишь хранит - тогда, наверное, контроллеру уж точно видно что данные изменены и надо что то сказать вьюшке, зачем в моделе уведомлять об изменении? 3) А если я ф-цию change заменю 2-мя сеттерами, тогда я дважды вызову уведомление об обновлении, что плохо. Как быть? Было бы очень здорово, если бы ты ткнул на конкретно этом примере, как сделать лучше.
__________________
Тут мужик танцует и поёт про флэш |
![]() |
Часовой пояс GMT +4, время: 03:26. |
|
|
« Предыдущая тема | Следующая тема » |
|
|