Flex事件才会触发一次

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

+0

@quoo 哇。好决定!我正在构建我的活动不正确,谢谢你的提示。 :D 但现在我正确调用构造函数,仍然有问题。 我找到了。 如果我有一个getter和一个具有相同名称的setter函数(saveResult),那么我可以调用setter一次,任何后续调用只是默默无闻。事实证明,这不是一个事件错误,但我学到了关于事件的东西,所以谢谢。我必须在我的二传手/吸气球手上做错事,但我看不到任何问题。 – PaulC 2009-10-12 19:52:01

+1

你确定你正在设置不同的值。如果您设置了相同的值,Flex会忽略它(以节省绑定时间)。 – ZaBlanc 2009-10-13 04:42:25

+0

@ZaBlanc只有当属性是[[Bindable]]时,对吧? – Amarghosh 2009-10-13 05:28:12