使 XML 构建的组件调用非接口代码

Making a XML-built component evoke a non-interface code

我正在使用 HaxeUI 制作游戏。我使用 XML 定义设计了一个简单的 UI。我需要按钮来执行与 UI 元素无关的代码,但是,从 onClick 属性 解析的代码看不到正在构建界面的区域中定义的任何本地标识符.

如何在不必避免使用 XML 定义的情况下解决这个问题?

目前没有完全按照您描述的方法,因为您在 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(见下文)并为具有 id 的任何内容创建正确类型的成员变量。

<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>