使 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>
我正在使用 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>