Просмотр полной версии : как постоянно отслеживать изменение значения переменной в другом классе?
как постоянно отслеживать изменение значения переменной в другом классе?
bugizavr
16.06.2009, 23:42
читай про get, set методы
а также про диспетчеризацию событий
читал. пока не очень получается. у меня в одном классе есть public static var s:String, которая в определенный момент времени изменяет значение. во втором - private var _msg:String.
во втором классе пишу:
private function get msg():String
{
return _msg;
}
private function set msg(val:String):void
{
_msg = FirstClass.s;
}
а вот как это использовать?
bugizavr
17.06.2009, 00:01
если грубо))
в первом классе должен объявить константу
S_CHANGED:String = "SChanged";
и при изменении s в ПЕРВОМ КЛАССЕ
должен писать
dispatchEvent(new Event(S_CHANGED));
а второй класс должен подписать на это событие
и в лисенере
_msg = e.currentTarget.s;
а как выполнить определенные действия лишь когда s примет значение? т.е. как постоянно отслеживать значение переменной в функции? к примеру, после завершения определенного дествия у меня запускается функция. как сделать, чтобы после изменения переменной выполнились описанные в функции действия? если я пытаюсь при отрицательном действии опять запустить эту функцию проверки бысторо наступает переполнение стека.
bugizavr
17.06.2009, 00:33
ну делаешь во втором классе объявление ЭС с таким именем _s
и в нём же пишешь
private function set s(val:String):void
{
_s = val;
dispatchEvent(new Event(S_CHANGED));
}
для статического свойства функцию вещания придется переложить на статический же диспатчер:
package
{
import flash.display.Sprite;
import flash.events.Event;
public class Test extends Sprite
{
public function Test():void
{
//подписываемся
Class1.addEventListener(Event.CHANGE, watchS);
//меняем/смотрим трейс
Class1.s = "value";
Class1.s = "new value";
}
private function watchS(evnt:Event):void
{
trace("Class1.s changed to " + Class1.s);
}
}
}
package
{
import flash.events.*;
public class Class1
{
private static var _s:String="";
private static var _dispatcher:EventDispatcher = new EventDispatcher();
static public function addEventListener (type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false) : void
{
_dispatcher.addEventListener(type, listener, useCapture, priority, useWeakReference);
}
static public function get s():String { return _s; }
static public function set s(value:String):void
{
if (_s == value) return;
_s = value;
_dispatcher.dispatchEvent(new Event(Event.CHANGE));
}
}
}
upd: добавил проверку (_s == value), чтоб не слать холостых событий
что такое "ЭС"?
а не проще ли при отрицательном ответе просто запускать таймер, который будет запускать функцию с проверкой до получения нужного результата. и обойтись без геттера/сеттера. или это нубский подход?
ramshteks
17.06.2009, 00:58
что такое "ЭС"?
а не проще ли при отрицательном ответе просто запускать таймер, который будет запускать функцию с проверкой до получения нужного результата. и обойтись без геттера/сеттера. или это нубский подход?
make me unsee it...
даже нубы думаю должны понимать что это не подход впринципе, когда есть перкрасный способ реализовать то, что вам нужно через события.
с сеттером не будет ведь никаких отрицательных результатов, ты всегда знаешь изменилось ли значение, только надо добавить проверку, можно и более какую хитрую, если надо канеш
есть функция, отслеживающая изменение переменной. есть другая функция, в котороя надо проверить значение и, если она не равно null выполнить действие. а вот как их связать? т.е. проверочная ф-ция выполнилась один раз, обломалась, и все? как тут без таймера?
очень хочется разобраться в get/set.
Бугагага, это еще смешней людей верящих в говорящих змей. Восьпользуйтесь поиском:P
http://bit.ly/OfdfG
http://bit.ly/mjmdj
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.