Просмотр полной версии : Как слушать изменение переменной в AS3?
actualizator
12.06.2009, 02:07
Есть текстовая переменная: status.
Нужно создать слушатель события, что бы при изменении статуса, выполнялась определенная функция.
Помогите пожалуйста, как это сделать.
Спасибо.
Да здравствуют сеттеры и геттеры.
actualizator
12.06.2009, 03:00
Да. Я нашел в сети такой код:
//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));
}
}
}
Может кто нибудь может обьяснить на пальцах что здесь что..?
Я даже не понимаю что означает
package
{
import flash.display.Sprite; :(
public Class TestDocClass
Class -> class должно быть со строчной.
public static const VALUE_CHANGED:String = 'value_changed';
должно быть --->
public static const VALUE_CHANGED:String = 'valueChanged';
И немного странные комментарии :) А так пример вроде рабочий.
package <имя>
Пакет куда складываются классы (физически, как правило, он представлен одной папкой с именем <имя> в которой храняться AS файлы с классами, но таких папок может быть больше одной - это зависит от того, сколько класс-путей у вас есть в проекте).
import <полное имя класса>
Директива указывающая компилятору где искать класс / функцию / переменную / неймспейс, если они нигде не объявляется в коде.
Чтобы использовать геттеры и сеттеры вам прийдется научиться пользоваться классами, таймлайновые скрипты такой возможности вам не дают.
Константа VALUE_CHANGED должна быть у кастомного события ModelEvent. И геттера нет в модели. И сеттер отстойненький.
__etc, если не трудно, растолкуй почему VALUE_CHANGED должна быть у кастомного события, из-за того что так принято или есть более веские резоны?
не понятно зачем вещать свое событие, если оно ничего не должно нести, кроме самого факта изменения?
Если уже придумали кастомный тип, тогда и событие тоже кастомное должно быть. Это константа события, а не модели. В противном случае можно было ограничится обычным Event.CHANGE.
если не трудно, можно ссылку на рабочий нормальный геттер/сеттер?
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.