我是as3的新手,也许这就是我不理解的原因,setInterval
导致错误的原因。
<mx:Script>
<![CDATA[
import flash.utils.setInterval;
import mx.controls.Alert;
[Bindable]
public var MyInt:int = 500;
setInterval(function():void{ ++MyInt; },1000);
]]>
</mx:Script>
我有一个标签,其中MyInt
的值可见,绑定工作完美,我已经通过多种方式进行了测试,并且ii创建了一个按钮,它增加了数字,但是如果我使用{{1我收到错误:setInterval
。
为什么呢?是什么导致这个?请解释一下,这样我就可以避免这样的错误。感谢
答案 0 :(得分:3)
我对Flex知之甚少,但我认为问题在于这段代码:
setInterval(function():void{ ++MyInt; },1000);
就像在任何函数之外放置在类定义中一样运行。这使得代码成为静态初始化器。也就是说,它在静态上下文中运行,这意味着它无法访问任何实例,因为代码运行时尚未创建任何实例。
这似乎证明了这一点:
public static var MyInt:int = 500;
setInterval(function():void { ++MyInt; trace(MyInt); },1000);
使用static
,代码可以正常运行。
但您可能不希望MyInt
是静态的。因此,您应该将setInterval
调用放在实例方法中。假设从init
mx:Application
回调调用initialize
,这应该可以正常工作:
[Bindable]
public var MyInt:int = 500;
private function init():void {
setInterval(function():void { ++MyInt; trace(MyInt); },1000);
}