2012-04-01 76 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语句中的对象。