在Flex中,现在可以使用-define编译器选项来完成各种有趣的工作。
在我的程序中,我使用的是这样的选项,使得我的某些代码被如下所示的块排除:

CONFIG::FACEBOOK{
   //Some code
}

这运作良好。

如何使用MXML获得类似的行为?

我想做同样的事情,但是以这种方式省略/包括MXML标记,而不是AS代码块。

最佳答案

我的解决方案是添加一些标记,这些标记可以帮助注释掉某些构建中不必要的mxml代码块。
例如,我想在Android和iOS版本中添加不同的按钮:

<!-- iOS --><!--
<s:Button id="backBtn"
    icon="{SHOW_LIST}"
    click="navigator.popView()"/>
--><!-- /iOS -->

<!--Android-->
<s:Button id="exitBtn"
    label="Exit"
    click="NativeApplication.nativeApplication.exit()"/>
<!--/Android-->

现在运行简单的批处理脚本,该脚本将在iOS构建源代码中注释掉所有特定于Android的代码

PrepareForIos.cmd
@echo off
"C:\Program Files (x86)\bin\fart.exe" -r -w -- H:\Flash\MyProject\src\* "<!--Android-->" "<!-- Android --><!--"
"C:\Program Files (x86)\bin\fart.exe" -r -w -- H:\Flash\MyProject\src\* "<!--/Android-->" "--><!-- /Android -->"
"C:\Program Files (x86)\bin\fart.exe" -r -w -- H:\Flash\MyProject\src\* "<!-- iOS --><!--" "<!--iOS-->"
"C:\Program Files (x86)\bin\fart.exe" -r -w -- H:\Flash\MyProject\src\* "--><!-- /iOS -->" "<!--/iOS-->"
pause

FART是用于查找和替换字符串的命令行工具

现在我们的代码如下所示,可以为iOS构建:
<!--iOS-->
<s:Button id="backBtn"
    icon="{SHOW_LIST}"
    click="navigator.popView()"/>
<!--/iOS-->

<!-- Android --><!--
<s:Button id="exitBtn"
    label="Exit"
    click="NativeApplication.nativeApplication.exit()"/>
--><!-- /Android -->

逆运算批处理:

PrepareForAndroid.cmd
@echo off
"C:\Program Files (x86)\bin\fart.exe" -r -w -- H:\Flash\MyProject\src\* "<!--Android-->" "<!-- Android --><!--"
"C:\Program Files (x86)\bin\fart.exe" -r -w -- H:\Flash\MyProject\src\* "<!--/Android-->" "--><!-- /Android -->"
"C:\Program Files (x86)\bin\fart.exe" -r -w -- H:\Flash\MyProject\src\* "<!-- iOS --><!--" "<!--iOS-->"
"C:\Program Files (x86)\bin\fart.exe" -r -w -- H:\Flash\MyProject\src\* "--><!-- /iOS -->" "<!--/iOS-->"
pause

关于apache-flex - Flex的MXML条件编译?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7375037/

10-13 05:40