Flex Builder 的提示功能还是Bug? A Feature or A Bug of Flex Builder?

在使用Flex Builder的时候,大家常常会为代码提示功能而感到方便。icon

当我们在一个类或者类的实例后输入 “.” 后, 会跟随有属于前面变量的一些属性和方法等的提示。

当使用Flex的event meta tag标签时,也会有相应的提示。例如,当我们自定义一个事件类,名为 CusEvent.as

 

package event
{
import flash.events.Event;

public class CusEvent extends Event
{
  public static const MY_TEST_EVENT:String = "myTestEvent";
  
  public function CusEvent(type:String, bubbles:Boolean=false, cancelable:Boolean=false)
  {
    super(type, bubbles, cancelable);
  }
  
}
}

在一个自定义的Student.as类中,加入其event meta tag,方便调用Student.as的类进行事件的监听

[Event(name="myTestEvent", type="event.CusEvent")]

在主程序中调用Student这个类,并激发myTestEvent为名称的事件。同时设置这个事件的监听。用Flex Builder写代码的时候,会有如下截图的提示,

right 

还真是方便。

如果我们改变事件的名称,如下改动,

package event
{
import flash.events.Event;

public class CusEvent extends Event
{
  public static const MY_TEST_EVENT:String = "helloWorldEvent";
  
  public function CusEvent(type:String, bubbles:Boolean=false, cancelable:Boolean=false)
  {
    super(type, bubbles, cancelable);
  }
  
}
}

相应的,meta tag改为

[Event(name="helloWorldEvent", type="event.CusEvent")]

当再次利用代码提示功能的时候,会发生如下的情况。提示的代码和真实的情况不符合,

false

自定义事件类中,并没有相对应的static const var HELLO_WORLD_EVENT。如果这时,在CusEvent后使用代码提示时,会有正确的信息出现。如下,

again

看来,Adobe是想规范我们meta tag事件的名名。如果事件的名称为abcXyzEvent, 那么用于定义事件的static const var最好是把每个单词段都大写,并且在中间加入下横线。变为ABC_XYZ_EVENT。

用意是好,不过不小心的话,程序是编译不过的。

P.S. 此问题由GL同学发现,作者帮助记录。

回應

还有一个前提条件是, 这个event

还有一个前提条件是, 这个event name的constant必须是放在单独的custom event class中; 但绝大多数情况下应该使用flash.events.Event而非创建自己的event class. 这个event提示功能基本上只适用于Flex SDK里的events了.