Как бы я включил файл MXML, встроенный в другой файл MXML? - PullRequest
5 голосов
/ 25 июля 2011

Я хотел бы включить файл MXML в мой файл MXML так же, как вы можете включить внешний файл в AS3, используя директиву include . Использование директивы include приводит код из внешнего файла в исходный файл во время компиляции, помещая его в ту же область видимости.

Например,

Application.mxml:

<Application>

    <source="external.mxml"/>

</Application>

External.mxml:

<Styles/>

<Declarations>
    <Object id="test"/>
</Declarations>

Мне нужно сохранить этот код / ​​mxml / xml во внешнем файле в объеме с оригиналом. Не спрашивайте меня, почему я хочу это сделать.

Еще один пример. Вот мой текущий код (упрощенно), все в 1 mxml файле:

...

File1.mxml
<Button click="clickHandler()"/>

<Script>
public function clickHandler():void {

}
</Script>

...

Вот что я хочу:

...

File1.mxml
<Group>

    <source="File2.mxml"/>

    <Button click="clickHandler()"/>

<Group>


File2.mxml
<Script>
public function clickHandler():void {
    trace(this); // File1.mxml
}
</Script>

...

Я хочу разбить свой код на отдельный файл ...

~~ Обновление ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~

Хотя НЕ то, что я просил, чтобы использовать схему «код позади», частично оправдывает нарушение кода вне поля зрения. Поэтому я создаю файл MXML, MyGroup.mxml или MyGroup.as, который расширяет группу, содержащую код clickHandler.

Проблема с этим методом в том, что я привязан к типу класса, который расширяю, жестко кодируя представление. Так, например, я должен был бы расширить Группу, если класс MXML, который я хочу разделить на отдельные файлы, является Группой.

Я работал над проектами, где это было сделано, и это не хорошо. Люди начинают устанавливать стили и визуальные аспекты или группировать / просматривать конкретные свойства в коде класса и позже, если или когда нам нужно изменить его или макет, мы получим все эти зависимости от контейнера. Это становится беспорядком. Кроме того, используя Code Behind, вы не сможете использовать его повторно (используйте так, как включают styles.as повторно). Так что это не решение, но я подумал, что упомяну это.

Вот пример кода

MyGroupBehind.mxml:

<Group>

   <Script>
   public function clickHandler():void {
       trace(this); // File1.mxml
   }
   </Script>

</Group>

MyGroupAhead.mxml:

<MyGroupBehind>

    <Button click="clickHandler()"/>

</MyGroupBehind>

Ответы [ 4 ]

2 голосов
/ 26 июля 2011

MXML преобразуется компилятором в класс, поэтому нет способа выполнить то, что вы просите.

Лично я считаю, что это хорошо.Разбиение вещей на отдельные файлы не означает «более организованный».На самом деле я бы сказал, что это дает совершенно противоположный эффект.Вы бы лучше сосредоточились на правильной структуре компонентов, ИМХО.

1 голос
/ 25 июля 2011

Просто начните вводить имя своего пользовательского компонента, затем нажмите Ctrl + Пробел. Завершение кода заполнит список возможных вещей, которые вы, возможно, захотите добавить, включая имя вашего компонента. Используйте стрелку вниз, чтобы выбрать имя вашего компонента, затем нажмите Enter. Завершение кода установит пространство имен и запустит тег для вашего компонента. Если вы идете в конец строки и набираете «/>» (без кавычек), вуаля! у вас будет встроенный тег, представляющий ваш пользовательский компонент MXML.

0 голосов
/ 08 декабря 2011

Скажем, мой файл MXML называется Пример в папке views . Просто вызовите его в родительском файле MXML, который вы хотите, чтобы он был в

, например

<views:Example/>
0 голосов
/ 25 июля 2011

Прежде всего, любой внешний mxml должен быть допустимым XML. Теперь, если у вас есть действительный файл MXML, вы просто добавляете его по имени, как показано ниже:

<Application>
<external:External/>
</Application>

Где 'external' - это пространство имен для вашего файла External.mxml.

...