Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как можно сделать обновление ресурсов без постоянной подстановки? (http://www.flasher.ru/forum/showthread.php?t=211153)

60reg 03.07.2015 18:16

Как можно сделать обновление ресурсов без постоянной подстановки?
 
Добрый день. Подскажите как можно сделать обновление ресурсов без постоянной подстановки
Код AS3:

tex.text=String(XML.user.diamond);

или может отдельным классом.

ZackMercury 03.07.2015 18:29

Для этого были придуманы события.
Есть класс EventDispatcher, который обычно расширяет модель, и который слушает вьюшка.

60reg 03.07.2015 20:12

Не могли-бы Вы привести пример этого класса?

udaaff 03.07.2015 21:54

http://www.flasher.ru/forum/blog.php?b=256

60reg 03.07.2015 22:15

Я имел ввиду класс с вот этим примером
Код AS3:

tex.text=String(XML.user.diamond);


ZackMercury 03.07.2015 22:19

Вопрос в том, зачем каждый кадр делать это, если можно не делать этого?

60reg 03.07.2015 22:25

Ясно... адекватного ответа здесь не найдеться.

alexandrratush 03.07.2015 22:36

Ответ есть на любой вопрос.)
В вашем случае: когда изменяются данные, тогда и изменяйте их отображение.

dimarik 03.07.2015 22:47

Цитата:

Сообщение от 60reg (Сообщение 1184426)
Подскажите как можно сделать обновление ресурсов без постоянной подстановки

Никак. Только подстановкой.

ЗЫ В конце вопросительного предложения ставится знак вопроса.

60reg 04.07.2015 01:15

Но подстановка не всегда работает....

alexandrratush 04.07.2015 09:46

Код в студию.

60reg 05.07.2015 18:32

Код AS3:

Core.Server("getInfo", '0', onGetInfo, onError);
function onGetInfo (data:XML) {
XML = new XML(data);
money.text = String(xml.user.diamond);
}


alexandrratush 05.07.2015 19:19

Из вашего кода видно что вы каждый раз вызываете метод на сервере? Я прав? Вопрос был в этом?

60reg 05.07.2015 21:28

Да в этом.

AlexCooper 06.07.2015 19:08

Примерно так

Main.as
Код AS3:

package
{
        import flash.display.Sprite;
 
        import model.AppModel;
 
        import view.View;
 
        public class Main extends Sprite
        {
                private var _app:AppModel;
                private var _view:View;
 
                public function Main()
                {
                        _app = new AppModel(); // создаем модель приложения
                        _view = new View( _app ); // создаем вьюшку и передаем в неё ссылку на модель
 
                        addChild( _view ); // добавляем вьюшку на сцену
 
                        // получаем от сервера данные
                        Core.Server("getInfo", '0', app.onGetInfo , onError);
                }
        }
}

model.AppModel.as
Код AS3:

package model
{
        public class AppModel extends BaseModel
        {
                private var _user:UserModel;
 
                public function AppModel()
                {
                        super();
 
                        _user = new UserModel(); // создаем модель юзера
                }
 
                public function get user():UserModel
                {
                        return _user; // геттер модели юзера
                }
 
                public function onGetInfo(data:XML):void {
 
                        var xml:XML = new XML(data);
 
                        _user.diamond = xml.user.diamond; // отправляем в модель полученное значение
                }
 
        }
}

model.UserModel.as
Код AS3:

package model
{
        public class UserModel extends BaseModel
        {
                public static var UPDATE_DIAMOND:String = 'UPDATE_DIAMOND'; // идентификатор свойства
 
                public function UserModel(){
 
                        super();
 
                }
 
                public function get diamond():Number
                {
                        return _diamond; // публичный геттер значения диамантов
                }
 
                public function set diamond(value:Number):void {
 
                        if (_diamond==value) return; // если старое значение равно новому, не делаем никаких действий
 
                        _diamond = value; // записываем
 
                        updateRegister( UserModel.UPDATE_DIAMOND, _diamond ); // выполняем метод BaseModel.updateRegister которому передаем тип свойства и значение
                }
 
                private var _diamond:Number = 0;
        }
}

view.View.as
Код AS3:

package view
{
        import flash.display.Sprite;
        import flash.events.Event;
        import flash.text.TextField;
 
        import events.UpdateEvent;
 
        import model.AppModel;
        import model.UserModel;
 
        public class View extends Sprite
        {
                private var _app:AppModel;
                private var _userMoney:TextField;
 
                public function View(app:AppModel)
                {
                        super();
 
                        _app = app; // сохраняем ссылку на модель приложения
 
                        createView(); // создаем вьюшку
 
                        drawUserMoney( _app.user.diamond ); // принудительно обновляем значение
 
                        _app.user.addEventListener( UpdateEvent.UPDATE, updateHandler ); // слушаем обновления данных UserModel
                }
 
                private function createView():void
                {
                        _userMoney = new TextField();
 
                        addChild( _userMoney );
                }
 
                protected function updateHandler(event:UpdateEvent):void
                {
                        // обработчик событий обновления данных
                        switch (event.property)
                        {       
                                // если это диаманты пользователя
                                case UserModel.UPDATE_DIAMOND:
                                        drawUserMoney( event.data ); // берём данные из события !!! преимущественный способ
                                        // или
                                        drawUserMoney( _app.user.diamond ); // берём данные из ссылки модели
                                        break;
 
                                default:
 
                                        break;
                        }
                }
 
                private function drawUserMoney(diamond:Number):void
                {
                        _userMoney.text = String( diamond );
                }
        }
}

model.BaseModel.as
Код AS3:

package model
{
        import flash.events.EventDispatcher;
 
        import events.UpdateEvent;
 
        public class BaseModel extends EventDispatcher
        {
                public function BaseModel()
                {
                        super();
                }
 
                protected function updateRegister(property:String, data:*=null):void {
                        dispatchEvent(new UpdateEvent(property, data) );       
                }
        }
}

events.UpdateEvent.as
Код AS3:

package events
{
        import flash.events.Event;
 
        public class UpdateEvent extends Event
        {
                public static var UPDATE:String = 'Update_data';
                private var _property:String;
                private var _data:*;
 
                public function UpdateEvent(property:String,data:*=null)
                {
                        super(UPDATE, true, false);
 
                        _property = property;
 
                        _data = data;
                }
 
                public function get property():String
                {
                        return _property;
                }
 
                public function get data():*
                {
                        return _data;
                }
 
                override public function clone():Event {
                        return new UpdateEvent(property,data);
                }
 
        }
}



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

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