MXML без Flex Framework/компонентов
-
10-07-2019 - |
Вопрос
Компилятор Flex может компилировать SWF-файлы «чистого AS3», которые не содержат байт-кода компонентов Flex.Так,
Можно ли создать структуру пользовательских компонентов (используемую вместо Flex Framework), которую по-прежнему можно будет визуально компоновать с помощью MXML (читай:разметки) и скомпилирован в SWF без какой-либо зависимости от самой Flex Framework?
Решение
Да, это возможно.Ваши файлы MXML — это, по сути, просто другой способ указания классов.Вы можете увидеть, к чему сводятся файлы mxml, скомпилировав проект и предоставив -compiler.keep-generated-actionscript=true
к mxmlc
.
бар.mxml:
<?xml version="1.0" encoding="utf-8"?>
<flash:Sprite xmlns:flash="flash.display.*">
</flash:Sprite>
После компиляции с mxmlc -compiler.keep-generated-actionscript=true bar.mxml
, получается следующее.
сгенерировано/bar-generated.as:
package {
import flash.display.Sprite;
// bunch of imports
public class bar extends Sprite {
public function bar() { super(); }
}
}
Другие советы
Существует два разных компилятора: один используется для компиляции кода ActionScript в байт-код AVM, а другой (mxmlc) компилирует файлы MXML в код ActionScript, который затем, в свою очередь, компилируется первым компилятором. Если вы хотите увидеть, какой код AS3 генерируется, передайте " -keep " параметр для компилятора MXML.
Теоретически возможно сделать то, что вы предлагаете. Я предполагаю, что mxmlc активно использует функции из класса UIComponent, так что вам, вероятно, придется немного взломать mxmlc, чтобы он не задевал классы не-UIComponent. Тем не менее, поскольку такие вещи, как [Bindable] / привязка данных, используют функции платформы Flex (а не обычные функции Flash Player / AVM), вы бы переписывали очень много кода.