Flex事件才会触发一次
在AIR应用程序中,我有一个私有变量和setter方法:Flex事件才会触发一次
private var _saveResult
public function set saveResult(result:String):void
{
_saveResult = result;
dispatchEvent(new resultUpdatedEvent(_saveResult));
}
的第一次,我设置“saveResult”的事件触发。但除非我重新启动应用程序,否则它不会再次启动。
如果我改变二传手到:
public function set saveResult(result:String):void
{
_saveResult = result;
if (result != null)
{
dispatchEvent(new resultUpdatedEvent(_saveResult));
}
}
问题就没有了,我可以设置每次变量很多时间和事件触发。
我的问题:
我在这里做错了什么?如果没有,任何人都可以向我解释发生了什么?如果是这样,我该怎么做?
谢谢!
每评论... 有没有事件调度问题。 我误诊了这个问题,真正的问题是,如果你有一个[Bindable]属性,并且你使用了一个setter,并且将它设置为当前值,那么flex将忽略它。所以你有几个选择:
1)给getter和setter不同的名字。看起来像一个“坏主意”,但它确实解决了这个问题。
2)从类(我的问题)或属性中删除[Bindable]。如果该类未实现IEventDispatcher,则需要这样做。你可以简单地“扩展Sprite”来看它是否工作,但这看起来像是一个“坏主意”作为解决方案,所以我在本页末尾实现了IEventDispatcher:http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/events/IEventDispatcher.html
3)我确定有一种方法可以解决这个错误,但我实际上并不需要这个类是[Bindable],所以我没有找到解决方法。
看起来你错误地构造了你的事件。 Event对象的第一个参数应该始终是一个字符串。所以在这种情况下,你会想要始终使用相同的字符串,以便可以听取事件。你的resultUpdatedEvent类是什么样的?你会希望它看起来是这样的:
package myEvents
{
import flash.events.Event;
public class PropertyChangeEvent extends Event
{
public static const PROPERTY_CHANGE:String = "propertyChange";
public var result:String = "";
// Public constructor.
public function PropertyChangeEvent (type:String,
result:String="") {
// Call the constructor of the superclass.
super(type);
// Set the new property.
this.result= result;
}
// Override the inherited clone() method.
override public function clone():Event {
return new PropertyChangeEvent(type, result);
}
}
}
这样一来,当你去你的派遣活动,您可以构造事件如下:
new PropertyChangeEvent(PropertyChangeEvent.PROPERTY_CHANGE, result);
这样一来,你就监听事件“PropertyChangeEvent.PROPERTY_CHANGE”,该事件从不改变。现在的问题是,你的事件监听器可能正在监听结果中保存的字符串所表示的事件,显然,它在第一次设置后会发生变化,因此无法为其分配监听器。
更多有关事件在AS3是如何工作的:http://livedocs.adobe.com/flex/3/html/help.html?content=events_02.html
@quoo 哇。好决定!我正在构建我的活动不正确,谢谢你的提示。 :D 但现在我正确调用构造函数,仍然有问题。 我找到了。 如果我有一个getter和一个具有相同名称的setter函数(saveResult),那么我可以调用setter一次,任何后续调用只是默默无闻。事实证明,这不是一个事件错误,但我学到了关于事件的东西,所以谢谢。我必须在我的二传手/吸气球手上做错事,但我看不到任何问题。 – PaulC 2009-10-12 19:52:01
你确定你正在设置不同的值。如果您设置了相同的值,Flex会忽略它(以节省绑定时间)。 – ZaBlanc 2009-10-13 04:42:25
@ZaBlanc只有当属性是[[Bindable]]时,对吧? – Amarghosh 2009-10-13 05:28:12