Можно ли использовать Flex Framework / компоненты без использования MXML?

Можно ли использовать Flex Framework и компоненты без MXML? Я довольно неплохо знаю ActionScript и не хочу возиться с каким-то новым языком XML только для того, чтобы получить там какой-нибудь простой пользовательский интерфейс. Может ли кто-нибудь предоставить пример, состоящий из файла .as, который может быть скомпилирован (в идеале с помощью FlashDevelop, хотя можно просто рассказать, как это сделать с помощью Flex SDK) и использует Flex Framework? Например, было бы идеально просто показать кнопку Flex, которая открывает предупреждение.

Если это невозможно, может ли кто-нибудь предоставить минимальный файл MXML, который будет загружать пользовательский класс AS, который затем имеет доступ к Flex SDK?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
19
0
9 913
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Да, вам просто нужно включить flex swc в свой путь к классам. Вы можете найти flex.swc в гибком sdk в frameoworks / lib / flex.swc

edit: Еще одна вещь: если вы используете Flex Builder, вы можете просто создать новый проект ActionScript, который по сути будет делать то же, что и выше.

Это не совсем работает. При попытке использовать компоненты Flex, такие как Button, DataGrid и т. д., Возникают различные ошибки.

davr 26.07.2010 06:51

Это очень простое приложение, которое выполняет только базовую загрузку в MXML. Это MXML:

<?xml version = "1.0" encoding = "utf-8"?>
<mx:Application xmlns:mx = "http://www.adobe.com/2006/mxml" layout = "absolute" creationComplete = "onCreationComplete()">
  <mx:Script source = "Script.as" />
</mx:Application>

Это Script.as:

import mx.controls.Button;
import flash.events.MouseEvent;
import mx.controls.Alert;
import mx.core.Application;

private function onCreationComplete() : void {
  var button : Button = new Button();
  button.label = "Click me";
  button.addEventListener(MouseEvent.CLICK, function(e : MouseEvent) : void {
    Alert.show("Clicked");
  });

  Application.application.addChild(button);
}

Это хорошо, но, к сожалению, в FlashDevelop нет автозавершения кода, например. "кнопка". Любой способ включить это?

Edward Tanguay 23.10.2008 13:06

ПРИМЕЧАНИЕ. Приведенный ниже ответ на самом деле не будет работать, если вы сначала не инициализируете библиотеку Flex. Для этого требуется много кода. См. Комментарии ниже или другие ответы для получения более подробной информации.


Основной класс даже не обязательно должен быть в MXML, просто создайте класс, унаследованный от mx.core.Application (как в любом случае компилируется класс MXML с корневым узлом <mx:Application>):

package {

  import mx.core.Application;


  public class MyFancyApplication extends Application {

    // do whatever you want here

  }

}

Кроме того, любой код ActionScript, скомпилированный с помощью компилятора mxmlc - или даже инструмента разработки Flash CS3 - может использовать классы Flex, это просто вопрос их доступности в пути к классам (ссылаясь на SWC фреймворка при использовании mxmlc или указывая на папка, содержащая исходный код при использовании любого из них). Если класс документа не наследуется от mx.core.Application, вы можете столкнуться с некоторыми проблемами, поскольку некоторые вещи в структуре предполагают, что это так.

Хм ... Я действительно пошел попробовать это, и простой "Hello World" получает массу ошибок времени выполнения. Есть ли какая-то инициализация, которую мне нужно сделать, или другие конкретные классы, которые мне нужно включить?

davr 29.09.2008 18:38

Это очень легко узнать, просто добавьте -keep-generated-actionscript к флагам компилятора и скомпилируйте класс MXML, унаследованный от Application. Компилятор создает каталог под названием «сгенерированный», в котором можно найти сгенерированный код ActionScript. Это, правда, немного сложнее, чем указано выше.

Theo 29.09.2008 21:19
Ответ принят как подходящий

Я сделал простой бутстрап, похожий на Borek (см. Ниже). Я бы хотел избавиться от файла mxml, но если у меня его нет, я не получаю ни одной из стандартных тем, которые поставляются с Flex (haloclassic.swc и т. д.). Кто-нибудь знает, как делать то, что предлагает Тео, и при этом применять стандартные темы?

Вот мой упрощенный метод начальной загрузки:

main.mxml

<?xml version = "1.0" encoding = "utf-8"?>
<custom:ApplicationClass xmlns:custom = "components.*"/>

ApplicationClass.as

package components {
    import mx.core.Application;
    import mx.events.FlexEvent;
    import flash.events.MouseEvent;
    import mx.controls.Alert;
    import mx.controls.Button;

    public class ApplicationClass extends Application {
        public function ApplicationClass () {
            addEventListener (FlexEvent.CREATION_COMPLETE, handleComplete);
        }
        private function handleComplete( event : FlexEvent ) : void {
            var button : Button = new Button();
            button.label = "My favorite button";
            button.styleName = "halo"
            button.addEventListener(MouseEvent.CLICK, handleClick);
            addChild( button );
        }
        private function handleClick(e:MouseEvent):void {
            Alert.show("You clicked on the button!", "Clickity");
        }
    }
}

Вот необходимые обновления для использования с Flex 4:

main.mxml

<?xml version = "1.0" encoding = "utf-8"?>
<local:MyApplication xmlns:fx = "http://ns.adobe.com/mxml/2009" xmlns:local = "components.*" />

MyApplication.as

package components {
    import flash.events.MouseEvent;
    import mx.controls.Alert;
    import mx.events.FlexEvent;
    import spark.components.Application;
    import spark.components.Button;

    public class MyApplication extends Application {
        public function MyApplication() {
              addEventListener(FlexEvent.CREATION_COMPLETE, creationHandler);
        }
        private function creationHandler(e:FlexEvent):void {
            var button : Button = new Button();
            button.label = "My favorite button";
            button.styleName = "halo"
            button.addEventListener(MouseEvent.CLICK, handleClick);
            addElement( button );
        }
        private function handleClick(e:MouseEvent):void {
            Alert.show("You clicked it!", "Clickity!");
        }
    }
}

Круто, это выглядит настолько минимально, насколько это возможно, с точки зрения mxml. Принимаю ваш ответ, так как это почти чистый код AS.

davr 21.10.2008 02:22

Большое спасибо. Используя FlashDevelop, у вас даже есть обширное автозавершение кода для таких объектов, как «кнопка». Хороший. В примере с Бореком это не сработало.

Edward Tanguay 23.10.2008 13:19

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