Flex数据绑定到变量的[Bindable]属性(无法检测警告)

时间:2012-04-01 18:32:27

标签: flex binding

我有以下代码:

<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>

相关的Globals类代码(Globals扩展自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}" />

我还没有测试它是否真的结合了。我不知道问题是什么。根据这个和预期的功能,人们不需要标记整个类可绑定:

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

编辑:脚本块位于FormItem的父级中。全局变量标记为受保护。

1)组件的子级是否可以访问组件脚本块中定义的属性?

2)如果祖先的脚本块中定义的属性的功能与类实例的属性相同(即它们在子组件的花括号中没有神奇的可用),后代通常会访问祖先或任何其他组件实例通过其id属性?

1 个答案:

答案 0 :(得分:2)

要修复警告,您需要在第一个代码段中对受保护的globals变量进行绑定:

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

是的,您不需要使整个GlobalsManager类可绑定。但是,在您的第一个代码段中,您在大括号表达式中使用globals变量(在dataProvider的赋值中)。

花括号表达式中使用的任何变量都必须是可绑定的......

[编辑] 请注意,如果花括号表达式中使用的变量或属性不可绑定,则花括号表达式只会被评估一次。当大括号epxression中的vars / props可绑定时,每次var / property更改时都会对它们进行求值。

[补充答案]

  

1)组件的子级是否可以访问在中定义的属性   组件的脚本块?

如果在脚本块中将变量声明为public,是的,它将是可访问的。

  

2)如果在祖先的脚本中定义属性的功能   块,与类实例的属性相同(即它们不是   神奇地可以在子组件的花括号中使用),做一个   后代通常访问祖先或任何其他组件   实例通过它的id属性?

是的,mxml中的id属性是一个变量名,可以引用Actionscript语句中的对象。