【问题标题】:Flex data binding to a [Bindable] property of a variable (unable to detect warning)Flex 数据绑定到变量的 [Bindable] 属性(无法检测到警告)
【发布时间】:2012-04-02 03:02:35
【问题描述】:

我有以下代码:

<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 属性?

【问题讨论】:

  • 谢谢,Sunil D 已回答。底部的问题与问题无关,但有效。

标签: apache-flex binding


【解决方案1】:

要修复警告,您需要在您的第一个代码 sn-p 中使受保护的 globals 变量可绑定:

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

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

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

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

[其他答案]

1) 组件的子组件能否访问定义在 组件的脚本块?

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-30
    • 2015-10-18
    • 2020-07-29
    • 1970-01-01
    • 1970-01-01
    • 2015-05-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多