Форум Flasher.ru

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

actualizator 12.06.2009 02:07

Как слушать изменение переменной в AS3?
 
Есть текстовая переменная: status.

Нужно создать слушатель события, что бы при изменении статуса, выполнялась определенная функция.

Помогите пожалуйста, как это сделать.

Спасибо.

GBee 12.06.2009 02:08

Да здравствуют сеттеры и геттеры.

actualizator 12.06.2009 03:00

Да. Я нашел в сети такой код:

Код AS3:

//The document class
package
{
  import flash.display.Sprite;
  import flash.events.Event;
  import flash.events.EventDispatcher;
  public Class TestDocClass extends Sprite
  {
    private var _model:Model;
    public function TestDocClass():void
    {
      _model = new Model();
      _model.addEventListener(Model.VALUE_CHANGED, onModelChanged);
    }
    private function onModelChanged(e:Event):void
    {
      trace('The value changed');
    }
  }
}
//The model that holds the data (variables, etc) and dispatches events. Save in same folder as DOC Class;
package
{
  import flash.events.Event;
  import flash.events.EventDispatcher;
  public class Model extends EventDispatcher
  {
    public static const VALUE_CHANGED:String = 'value_changed';
    private var _someVar:someVarType;
    public function Model():void
    {
      trace('The model was instantiated.');
    }
    public function set someVariable(newVal:someVarType):void
    {
      _someVar = newVal;
      this.dispatchEvent(new Event(Model.VALUE_CHANGED));
    }
  }
}

Может кто нибудь может обьяснить на пальцах что здесь что..?
Я даже не понимаю что означает
Код AS3:

package
{
  import flash.display.Sprite;

:(

wvxvw 12.06.2009 03:24

public Class TestDocClass
Class -> class должно быть со строчной.

public static const VALUE_CHANGED:String = 'value_changed';
должно быть --->
public static const VALUE_CHANGED:String = 'valueChanged';

И немного странные комментарии :) А так пример вроде рабочий.

package <имя>
Пакет куда складываются классы (физически, как правило, он представлен одной папкой с именем <имя> в которой храняться AS файлы с классами, но таких папок может быть больше одной - это зависит от того, сколько класс-путей у вас есть в проекте).

import <полное имя класса>
Директива указывающая компилятору где искать класс / функцию / переменную / неймспейс, если они нигде не объявляется в коде.

Чтобы использовать геттеры и сеттеры вам прийдется научиться пользоваться классами, таймлайновые скрипты такой возможности вам не дают.

etc 12.06.2009 09:16

Константа VALUE_CHANGED должна быть у кастомного события ModelEvent. И геттера нет в модели. И сеттер отстойненький.

silin 12.06.2009 15:29

__etc, если не трудно, растолкуй почему VALUE_CHANGED должна быть у кастомного события, из-за того что так принято или есть более веские резоны?
не понятно зачем вещать свое событие, если оно ничего не должно нести, кроме самого факта изменения?

etc 12.06.2009 15:33

Если уже придумали кастомный тип, тогда и событие тоже кастомное должно быть. Это константа события, а не модели. В противном случае можно было ограничится обычным Event.CHANGE.

loover 16.06.2009 23:56

если не трудно, можно ссылку на рабочий нормальный геттер/сеттер?


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

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