Создание встроенного в 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>
Другие вопросы по тегам