Chr*_*ing 5 apache-flex mxml conditional-compilation actionscript-3 flex4.5
在Flex中,现在可以使用-define编译器选项来执行各种很酷的操作.在我的程序中,我使用的选项使得我的一些代码被这样的块排除:
CONFIG::FACEBOOK{
//Some code
}
Run Code Online (Sandbox Code Playgroud)
而且效果很好.
如何使用MXML获得类似的行为?
我想做同样的事情,但是以这种方式省略/包括MXML标签,而不是AS代码块.
\n\n\n很抱歉回到这个话题的速度很慢。我的目的是拥有一些界面元素(按钮等),这些元素在某些版本中被省略,而包含在其他版本中。我当前的解决方法是简单地将组件的可见属性设置为编译器定义的布尔常量 - 它很粗糙,但它有效。有更好的方法吗?\xe2\x80\x93 Chris Kitching 9 月 20 日 14:40
\n
我认为您也许可以使用 flex 的延迟初始化行为来控制创建哪些组件并将其添加到您的父组件中 - 这可能有点违背 MXML 的想法,但我认为这是可能的。
\n\n以下是手动初始化延迟组件(对于 Spark 和 mx 组件)的一些背景知识:
\n http://help.adobe.com/en_US/flex/using/WS2db454920e96a9e51e63e3d11c0bf69084-7aee.html
如果您使用的是 Flex 3,那么您可以重写该createComponentsFromDescriptors()方法并访问该childDescriptors属性来准确控制将创建哪些子 MXML 组件。
创建延迟组件一文展示了如何从描述符获取有关 MXML 组件的信息。您可以使用此行为来确定哪些组件应该或不应该为当前构建实例化。
\n\n类参考UIComponentDescriptor:\n http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/core/UIComponentDescriptor.html
在 Flex 4 中,情况不太清楚 - 所有 MXML 组件都将从其描述符创建(没有属性childDescriptors,只有mxmlContentFactory将创建所有子组件的实例)。
控制 MXML 组件显示的两个选项可能是:
\n\n重写该createDeferredContent()方法并使用 mxmlContentFactor 初始化子组件,但在设置 mxmlContent 属性(这会将它们添加到显示列表)之前从返回的数组中删除元素。
实现一个模板组件,该组件准确定义允许作为子组件的类型,并且仅初始化适合当前构建类型的子组件。
\n下面是通过这种方式创建模板组件的示例:在模板组件中使用 IDeferredInstance。
希望这能给您带来一些思考,并希望它不会太复杂:)
\n\n原答案:
\n\n简而言之,您不能对 MXML 标记使用条件编译。\n所有 MXML 标记都将编译到组件中。
\n\n您想要使用条件 MXML 的目标是什么?
\n\n您是否尝试根据编译器属性包含/排除类,但仍保留简写 MXML 声明?即不必在动作脚本中定义所有内容。
\n\n有了更多信息,我们也许能够找到可接受的替代方案:)
\n| 归档时间: |
|
| 查看次数: |
1764 次 |
| 最近记录: |