使用 XmlCompiler 在运行时定义的条件变量
Use conditional variables define at runtime with XmlCompiler
关于 conditional parsing on hexIoC 的快速问题。
据我所知,hexIoC 支持在编译时和运行时进行 DSL 解析,具有多通道。
是否有解决方案,使用 XmlCompiler 和运行时定义的条件变量值?
类似于:
var useHlsJs:Bool = true;
#if js
useHlsJs = useHlsJs && !this.isMobile();
#end
applicationAssembler = XmlCompiler.readXmlFile( "videoplayer/configuration/context.xml", null, ["useHlsJs" => useHlsJs] );
没有。
现在让我解释一下为什么。
Xml 由 Xml 编译器解析,最后生成平台代码(JS,Php...),为此它使用条件变量在解析 DSL 之前世代.
简而言之,这意味着在运行时这个条件 DSL 不再存在。您的 DSL 已被解析并转换为平台代码,所有条件变量排除的块已被删除。
<root name="applicationContext">
<test if="js" id="s" value="hello JS"/>
<test if="php" id="s" value="hello PHP"/>
</root>
这将生成 -D php=true
coreFactory.register( "s", "hello PHP" );
如果你想在运行时用条件解析 DSL 的一部分,你应该使用 XmlReader 而不是 XmlCompiler。
关于 conditional parsing on hexIoC 的快速问题。
据我所知,hexIoC 支持在编译时和运行时进行 DSL 解析,具有多通道。
是否有解决方案,使用 XmlCompiler 和运行时定义的条件变量值?
类似于:
var useHlsJs:Bool = true;
#if js
useHlsJs = useHlsJs && !this.isMobile();
#end
applicationAssembler = XmlCompiler.readXmlFile( "videoplayer/configuration/context.xml", null, ["useHlsJs" => useHlsJs] );
没有。 现在让我解释一下为什么。
Xml 由 Xml 编译器解析,最后生成平台代码(JS,Php...),为此它使用条件变量在解析 DSL 之前世代.
简而言之,这意味着在运行时这个条件 DSL 不再存在。您的 DSL 已被解析并转换为平台代码,所有条件变量排除的块已被删除。
<root name="applicationContext">
<test if="js" id="s" value="hello JS"/>
<test if="php" id="s" value="hello PHP"/>
</root>
这将生成 -D php=true
coreFactory.register( "s", "hello PHP" );
如果你想在运行时用条件解析 DSL 的一部分,你应该使用 XmlReader 而不是 XmlCompiler。