Создание встроенного в XML компонента вызывает неинтерфейсный код
Я делаю игру, используя HaxeUI. Я разработал простой пользовательский интерфейс с использованием определения XML. Мне нужна кнопка для выполнения кода, который не связан с элементами пользовательского интерфейса, однако проанализированный код свойства onClick не видит никаких локальных идентификаторов, определенных в области, в которой строится интерфейс.
Как обойти это без необходимости воздерживаться от использования определения XML?
1 ответ
В настоящее время не существует метода, точно такого, как вы его описываете, в том смысле, что вы определяете свой обработчик кликов в XML и который ссылается на haxe -код - есть эта открытая проблема, которая, по сути, такова, как вы описываете: https://github.com/haxeui/haxeui-core/issues/196 - и я думаю, что это будет полезным дополнением.
Однако существует этот метод (с помощью макросов сборки для создания пользовательского компонента):
@:build(haxe.ui.macros.ComponentMacros.build("myxml.xml"))
class MySomething extends Box {
public function new() {
super();
myButton.onClick = function(e) {
myLabel.text = "Clicked";
}
}
}
Этот макрос берет ваш xml (см. Ниже) и создает правильно типизированные переменные-члены из всего, что имеет идентификатор.
<vbox>
<button id="myButton" />
<label id="myLabel" />
</vbox>
Это может затем использоваться свободно в коде или xml:
Screen.instance.addComponent(new MySomething());
Screen.instance.addComponent(new MySomething());
Screen.instance.addComponent(new MySomething());
или же
<vbox>
<mysomething />
<mysomething />
<mysomething />
</vbox>