Гибкая привязка данных к свойству [Bindable] переменной (невозможно обнаружить предупреждение) - PullRequest
0 голосов
/ 01 апреля 2012

У меня есть следующий код:

<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

РЕДАКТИРОВАТЬ: блок Script находится в родительском элементеFormItem.Глобальная переменная помечена как защищенная.

1) Могут ли дочерние элементы компонента получать доступ к свойствам, определенным в блоках сценария компонента?

2) Если функциональность свойств, определенных в блоках сценария предка, совпадает со свойствами экземпляра класса (т. Е. Они не доступны магическим образом в фигурных скобках дочерних компонентов), обычно ли потомок получает доступпредок или любой другой экземпляр компонента через его свойство id?

1 Ответ

2 голосов
/ 01 апреля 2012

Чтобы исправить предупреждение, необходимо сделать защищенную переменную globals привязываемой в первом фрагменте кода:

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

Да, вам не нужно привязывать весь класс GlobalsManager. Но в своем первом фрагменте кода вы используете переменную globals внутри выражения фигурных скобок (в присваивании для dataProvider).

Любая переменная, используемая внутри выражения в фигурных скобках, должна быть привязываемой ...

[Изменить] Обратите внимание, что если переменная или свойство, используемое в выражении фигурной скобки, НЕ является привязываемым, выражение фигурной скобки вычисляется один раз и только один раз. Когда переменные / фигурные скобки в выражении фигурных скобок являются связываемыми, они оцениваются каждый раз, когда изменяется переменная / свойство.

[Дополнительные ответы]

1) Могут ли дочерние элементы компонента получать доступ к свойствам, определенным в блоки скриптов компонента?

Если вы объявите переменную как public в блоке скрипта, да, она будет доступна.

2) Если функциональность свойств определена в скрипте предка блоки, так же, как свойства экземпляра класса (т.е. они не являются магически доступны в фигурных скобках дочерних компонентов), делает потомок обычно имеет доступ к предку или любому другому компоненту экземпляр через его свойство id?

Да, свойство id в mxml - это имя переменной, на которую можно ссылаться в объекте в инструкциях Actionscript.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...