2012-04-01 19 views
0

我有以下代碼:Flex的數據綁定到變量的[可綁定]屬性(無法檢測到警告)

<fx:Script> 
<![CDATA[ 
    import shared.GlobalsManager; 
    import app.Globals; 
    protected var globals:Globals=GlobalsManager.getGlobals(); 
]]> 
</fx:Script> 
<s:FormItem label="Server or Client:"> 
<s:DropDownList id="serverOrClient" dataProvider="{globals.serverOrClientOptions}" /> 
</s:FormItem> 

和有關全局類代碼(全局自GlobalsAdminGlobalS延伸)

public class GlobalsAdminGlobalS extends GlobalsAdminS { 
    public static const ServerOrClient_server:String="server"; 
    public static const ServerOrClient_client:String="client"; 
    public static const ServerOrClient_both:String="both"; 
    [Bindable] 
    public var serverOrClientOptions:ArrayCollection=new ArrayCollection(
     [ServerOrClient_server,ServerOrClient_client,ServerOrClient_both]); 
    [Bindable] 
    public var appOrAdminOptions:ArrayCollection=new ArrayCollection(
     [AppOrAdmin_App,AppOrAdmin_Admin]); 
} 

我收到以下警告與Flex 4.5.1編譯器:

WARNING S:\_flash\shared\shared\src\shared\admin\global\ClassManager.mxml[28]: 
Data binding will not be able to detect assignments to "globals". 

<s:DropDownList id="serverOrClient" dataProvider="{globals.serverOrClientOptions}" /> 

我沒有TES如果它真的綁定的話。我沒有看到問題是什麼。根據這一點,有什麼預期的功能,一個並不需要標註整個類可綁定:

http://www.adobe.com/devnet/flex/articles/databinding_pitfalls.html

編輯:腳本塊位於的,即爲FormItem的父母。全局變量被標記爲受保護的。

1)組件的孩子可以訪問組件的腳本塊中定義的屬性嗎?如果在祖先的腳本中定義的屬性的功能塊與類實例的屬性相同(即它們在子組件的大括號中不是神奇地可用的),那麼後代通常訪問祖先或通過其id屬性的任何其他組件實例?

+0

謝謝,已經由Sunil D回答。底部的問題與問題無關,但是有效。 – MetaChrome 2012-04-01 18:40:02

回答

2

要解決的警告,你需要保護globals變量綁定在你的第一個代碼段:

[Bindable] 
protected var globals:Globals=GlobalsManager.getGlobals(); 

是的,你不需要使整個GlobalsManager類可綁定。但是,在您的第一個代碼片段中,您正在使用花括號表達式中的globals變量(在dataProvider的賦值中)。

內部使用的大括號表達式必須是可綁定的任何變量...

[編輯] 注意,如果在大括號表達式中使用的變量或屬性是可綁定NOT,大括號表達式獲取評估一次又一次。當大括號epxression中的變量/道具可綁定時,每當var /屬性發生變化時都會對它們進行評估。

[附加的答案]

1)可一組件訪問屬性的孩子們在 組件的腳本塊定義?

如果您在腳本塊中聲明變量爲public,那麼可以訪問它。

2)如果在祖先的腳本 塊定義的屬性的功能,是一樣的(一個類實例的屬性,即它們不是 在子組件的花括號奇蹟般地獲得),做了 後代通常通過其id屬性訪問祖先或任何其他組件 實例?

是的,mxml中的id屬性是一個變量名稱,您可以引用Actionscript語句中的對象。

相關問題