有人可以向我解释这个常见的约束陷阱吗? (使用错误的可绑定事件名称)

时间:2010-10-29 07:54:16

标签: flex binding gumbo

我指的是这个网站link text

  

使用错误的事件名称   [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)); 
}

我同意,错误的例子确实看起来像个好主意,我会这样做,因为我认为这是正确的方法,并避免输入错误的可能性。为什么使用常量的名称而不是它的值?当然这不可能是对的吗?

感谢您的见解

1 个答案:

答案 0 :(得分:4)

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

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

我唯一可以建议的是注册Adobe JIRA,对错误进行投票,并希望4.5中的编译器修复带来一些缓解。