是否可以使用EventListener来监听变量并检测变量的值何时发生变化?谢谢。AS3 - 我可以使用addEventListener检测变量值的变化吗?
10
A
回答
14
如果将它全部包装到一个类中,这很容易做到。我们将使用getter/setter方法。无论何时被调用,setter方法都会分派和事件。
(注意:Setters和Getters被视为属性)。你只是分配一个值,而不是调用一个方法(例如someVar = 5
代替someVar(5);
即使制定者/吸气剂函数/方法,他们像对待性质
//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));
}
}
}
1
您曾经能够使用Object.watch在AS2中做类似的事情。我没有看到直接的等价物,但它看起来像mx.binding.utils.ChangeWatcher会给你任何可绑定变量的类似功能。我不知道如何在AS3中为非可绑定变量执行此操作,但是如果要观看的变量是可绑定的(或者如果您可以将其修改为可绑定变量),那么ChangeWatcher可能会为您提供什么你要。
2
@BrianHodge:你如何实际使用您的例如,你如何调用set函数?你如何引用它?在何处传递要更改的变量..?
比方说,如果我想用按钮单击来更改包装变量。 我必须承认,我尝试了一些其他代码和示例(getter/setter)类型,其中有dispatchEvent
或者没有,我无法克服它!但是您的示例似乎正是我所需要的,但无法让它工作。
当我将函数设置为文档类时,我得到The model was instantiated
。就这样。
我终于找到了像我这样的人,他们正在放弃这个派遣的事情!
在我的情况下,_someVar
变量的数据类型必须为String
(对于fornewVal
也是如此)。
OnceTestDocClass
设置为您的文档类;你指的实例是这样的模式:
_model.someVariable="new stuff";
我试图改变这样的价值:
_model.someVariable("new stuff");
您可以在Model
类中添加某些微量元素的行动必须在一个清晰的演示输出面板:
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));
}
}
}
这不是很多,但这些东西可以花费一些人一大堆的时间=)
相关问题
- 1. AS3 - 检测变量变化并将值传递给监听者
- 2. addEventListener检测类型的变化
- 3. addEventListener - 检测div元素的变化?
- 4. 检测python变量值的变化
- 5. 我可以使用变量的值作为新变量吗?我该怎么做?
- 6. 检测变量变化
- 7. 我可以使用LIMIT和变量吗?
- 8. as3变量不可能变化
- 9. 我可以使用Xcode模拟器测试显着变化吗?
- 10. 我可以在swift中使用变量的值作为新变量吗?
- 11. as3 addEventListener - 在函数中传递变量?
- 12. 我可以使用全局变量初始化一个类变量吗? (ruby)
- 13. 我可以在PHP中使用变量变量,例如$$ var吗?
- 14. 我可以使用其他变量访问类变量吗?
- 15. 使用PHP,我可以把变量放在变量里面吗?
- 16. 我可以操纵变量在Java中变化的方式吗?
- 17. 我可以在PHP变量上使用序列化吗?
- 18. $ $ idx可以用于变量变量吗?
- 19. 替代改变听众对变量的值检测变化
- 20. jQuery的变化检测值
- 21. 我可以暂时变化一个变量吗?
- 22. 变量变化的实时检测
- 23. 检测变化的变量R
- 24. PHP如何检测变量的变化?
- 25. 如何检测变量的变化?
- 26. 检测环境变量的变化
- 27. 输入值变化检测使用类
- 28. 我可以使用自定义赋值运算符初始化变量吗?
- 29. 我可以听GPS的变化吗?
- 30. android - 检测流量变化
是的 - 我很想看到一个这样的工作示例。我正在尝试加入一个命中测试。当用户在一个项目上时,有一个ENTER_FRAME监听器注册一个常量“命中”值,但是当它们关闭时,监听器改变注册一个常量“off”值。这种情况将如何适用于您的模型? – mheavers 2011-06-22 17:56:22