Actionscript 3 AS3-我可以使用addEventListener检测变量值的变化吗?
是否可以使用EventListener侦听变量并检测该变量的值何时更改?谢谢。您过去可以使用Object.watch在AS2中执行类似的操作。我没有看到直接的等价物,但它似乎会为任何可绑定的变量提供类似的功能Actionscript 3 AS3-我可以使用addEventListener检测变量值的变化吗?,actionscript-3,addeventlistener,Actionscript 3,Addeventlistener,是否可以使用EventListener侦听变量并检测该变量的值何时更改?谢谢。您过去可以使用Object.watch在AS2中执行类似的操作。我没有看到直接的等价物,但它似乎会为任何可绑定的变量提供类似的功能 我不知道如何在AS3中对不可绑定的变量执行此操作,但是如果您想要查看的变量是可绑定的(或者如果您可以将其修改为可二进制),那么ChangeWatcher可能会为您提供所需的内容。如果您将其全部打包到一个类中,这是非常容易做到的。我们将使用getter/setter方法。每当调用setter
我不知道如何在AS3中对不可绑定的变量执行此操作,但是如果您想要查看的变量是可绑定的(或者如果您可以将其修改为可二进制),那么ChangeWatcher可能会为您提供所需的内容。如果您将其全部打包到一个类中,这是非常容易做到的。我们将使用getter/setter方法。每当调用setter方法时,setter方法都将分派和事件 (注意:setter和getter被视为属性)。您只需指定一个值,而不是调用一个方法(例如
someVar=5
而不是someVar(5);
即使setter/getter是函数/方法,它们也被视为属性
//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));
}
}
}
@BrianHodge:你实际上是如何使用你的例子的?你如何调用set函数?你如何引用它?在哪里传递要更改的变量 比如说,如果我想通过单击按钮来更改包装的变量。 我必须承认,我尝试了其他一些代码和示例(getter/setter)类型,有
dispatchEvent
或没有,但我无法克服!但您的示例似乎正是我需要的,只是无法使其工作
当我将函数设置为document类时,我得到了模型实例化的,仅此而已
我终于发现,对于像我这样的人来说,他们在这件事上浪费时间!
在我的例子中,\u someVar
变量必须以字符串
的形式输入数据(与fornewVal
的情况相同)
OnceTestDocClass
被设置为您的文档类;您可以引用如下实例化的模型:
_model.someVariable="new stuff";
_model.someVariable("new stuff");
我试图像这样更改值:
_model.someVariable="new stuff";
_model.someVariable("new stuff");
您可以在模型
类中添加一些跟踪操作,以便在输出面板中有一个清晰的演示:
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:String = "default";
public function Model():void
{
trace('The model was instantiated.');
}
public function set someVariable(newVal:String):void
{
trace ("before " + _someVar);
_someVar = newVal;
trace ("after " + _someVar);
this.dispatchEvent(new Event(Model.VALUE_CHANGED));
}
}
}
这并不多,但这些东西可能会花费一些人大量的时间=)是的,我希望看到一个这样的工作示例。我正在尝试合并一个命中测试。当用户在一个项目上时,有一个ENTER\u FRAME侦听器注册一个常量“hit”值,但当它们关闭时,侦听器会更改为注册一个常量“off”值。该场景如何应用于您的模型?