3

我指的是本站链接文字

在 [Bindable] 标签中使用错误的事件名称会导致您的应用程序无法绑定您的属性,您甚至都不知道原因。当您使用带有自定义名称的 [Bindable] 标记时,下面的示例看起来是个好主意:

public static const EVENT_CHANGED_CONST:String = "eventChangedConst"; 
private var _number:Number = 0; 
[Bindable(event=EVENT_CHANGED_CONST)] 
public function get number():Number 
{ 
  return _number; 
} 
public function set number(value:Number) : void 
{ 
  _number = value; 
  dispatchEvent(new Event(EVENT_CHANGED_CONST)); 
}

上面的代码将静态属性分配给事件名称,然后使用相同的分配来调度事件。但是,当值更改时,绑定似乎不起作用。原因是事件名称将是 EVENT_CHANGED_CONST 而不是变量的值。

代码应该是这样写的:

public static const EVENT_CHANGED_CONST:String = "eventChangedConst"; 
private var _number:Number = 0; 
[Bindable(event="eventChangedConst")] 
public function get number():Number 
{ 
  return _number; 
} 
public function set number(value:Number) : void 
{ 
  _number = value; 
  dispatchEvent(new Event(EVENT_CHANGED_CONST)); 
}

我同意,错误的例子看起来确实是个好主意,我会这样做,因为我认为这是正确的方法,并且避免了打字错误的可能性。为什么使用常量的名称而不是它的值?这肯定不对吧?

我很欣赏你的见解

4

1 回答 1

4

因为标准的 Flex 编译器有时并不那么聪明……我感受到了你的痛苦!我已经多次抱怨这个确切的问题。

如果我没记错的话,那是因为编译器做了多次传递。早期通道之一将元数据更改为 AS 代码。此时在编译器中它还没有解析其余的 AS 代码,因此它无法解析常量或对其他文件中的静态变量的引用。

The only thing I can suggest is sign up to the Adobe JIRA, vote for the bug, and hope that the compiler fixes in 4.5 bring some relief.

于 2010-10-29T10:49:18.220 回答