Доступ к общедоступной привязываемой переменной из одного.MXML в другом.MXML

В качестве основного приложения я установил 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 ответ

Решение

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

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

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

Другие вопросы по тегам