2010-10-29 15 views
3

我指的是這個網站link text有人可以向我解釋這個常見的約束性陷阱嗎? (使用錯誤的綁定事件名稱)

在 [綁定]標籤使用錯誤的事件名稱可能會導致 應用到你的財產沒有綁定, 你不會甚至知道爲什麼。當 使用[綁定]標籤與 自定義名稱,下面的例子看起來 是一個好主意:

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

由於標準Flex編譯器是不是在倍聰明......我覺得你的痛苦!我已經多次抱怨這個確切的問題。

如果我沒有記錯的話,那是因爲編譯器做了多遍。早期傳遞之一將元數據更改爲AS代碼。此時在編譯器中它沒有解析AS代碼的其餘部分,所以它無法解析常量或對其他文件中靜態變量的引用。

我可以建議的唯一事情就是註冊到Adobe JIRA,爲bug投票,並希望4.5版本的編譯器能夠解決一些問題。

相關問題