Доступ к общедоступной привязываемой переменной из одного .MXML в другом .MXML - PullRequest
1 голос
/ 12 июня 2011

У меня в качестве основного приложения установлено "main.mxml" который содержит следующую декларацию:

[Bindable]
[Embed(source="../images/common/user.png")] 
public var userIcon : Class;

У меня есть другой модуль, на котором я хочу получить к нему доступ в виде значка кнопки. Я пробовал со следующим определением, но оно не работает:

<s:Group width="100%" height="29">
    <s:layout>
        <s:VerticalLayout horizontalAlign="center"/>
    </s:layout>
    <s:Button id="buttonLoad" width="80%" label="Loading" icon="{ main.userIcon }"/>
</s:Group>
  • Как получить доступ к объявлению внутри main.mxml из других модулей?

1 Ответ

2 голосов
/ 12 июня 2011

Имя класса MXML не является идентификатором его экземпляра (поскольку он может иметь много экземпляров).Вы должны думать о файлах MXML не как о файлах, а как о классах.Они абсолютно такие же, как обычные классы ActionScript.Те же правила, что и в других языках ООП.Поэтому, если у вас есть main.mxml main, это имя класса для этого класса, и его пакет определяется тем путем к файлу MXML относительно исходной папки (как в классах ActionScript).Вот почему вы должны называть свои классы MXML заглавными буквами (Main.mxml, но не main.mxml).

Если ваше main.mxml является приложением верхнего уровня, вы можете указать его как FlexGlobals.topLevelApplication.Но это не правильный способ.

Лучший способ - внедрить это свойство в целевой класс.Это можно сделать с помощью Dependency Injecting Framework / Container, например Spring ActionScript или RobotLegs или Parsley .Или вы можете сделать это вручную, делегировав из верхнего приложения класс, содержащий кусок кода, который обрабатывает модули.Когда модуль загружен, передайте это значение туда.

...