如何使FlashBuilder使用自定义命名空间前缀

时间:2011-06-23 12:23:47

标签: flex namespaces flash-builder manifest

我有一个组件库。它有一个如下所示的清单文件:

<?xml version="1.0"?>
<componentPackage>
    <component id="AutoComplete" class="be.edge.components.AutoComplete" />
    <!-- more components left out for brevity -->
</componentPackage>

我使用这些编译器设置通过FlashBuilder编译库:

FlashBuilder library compiler namespace inputs

当我在其他FlashBuilder项目中使用已编译的库时,一切都按预期工作。我得到代码完成,当我从代码完成中选择一个建议时,命名空间属性会自动添加到组件中,如下所示:

<s:Skin xmlns:fx="http://ns.adobe.com/mxml/2009" 
        xmlns:s="library://ns.adobe.com/flex/spark" 
        xmlns:ns="library://ns.edge.be" >

    <ns:AutoComplete />

</s:Skin>

但是: FlashBuilder会自动创建前缀'ns'。我想将其定制为'e'。如何使FlashBuilder默认使用此自定义前缀?

我有两个原因:

  1. 'ns'没有说什么:它只是说使用了一个名称空间,而不是名称空间。
  2. 当我使用其他库时,这些库也以“library:// ns”之类的url开头。 FlashBuilder可能会开始编号前缀以解决冲突(ns,ns1,ns2等),这将更加令人困惑。
  3. 修改

    我还将config.xml传递给编译器,该编译器具有以下与命名空间相关的声明:

    <compiler>
        <namespaces>
            <namespace>
                <uri>library://ns.edge.be</uri>
                <manifest>manifest.xml</manifest>
            </namespace>
        </namespaces>
    </compiler>
    
    <include-namespaces>
        <uri>library://ns.edge.be</uri>
    </include-namespaces>
    

2 个答案:

答案 0 :(得分:6)

使用工作:

在/ src文件夹中创建一个名为design.xml的文件:

<?xml version="1.0" ?>
<design>
    <namespaces>
        <namespace prefix="mangos" uri="http://com.mangofactory.sample/mxml/2010" />
    </namespaces>
</design>

在/ src文件夹中创建一个名为manifest.xml的文件:

<componentPackage>
        <component id="MyClass" class="com.mangofactory.framework.MyClassTag"/>
</componentPackage>

在构建属性中配置命名空间URL等: enter image description here

假设导致Flash构建器提示如下:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" 
               xmlns:mx="library://ns.adobe.com/flex/mx"
               xmlns:mangos="http://com.mangofactory.sample/mxml/2010">
    <fx:Declarations>
        <mangos:MyClass />
    </fx:Declarations>
</s:Application>

(请注意,该类显示为MyClass而不是MyClassTag,命名空间显示为mangos

但是,我只是尝试这样做,虽然该类已正确重命名,但命名空间显示为ns。我知道这曾经在FB3.x中运行,也许我已经忘记了一步,或者FB4.5已经破坏了它。

答案 1 :(得分:0)

如果您只是将xmlns:ns更改为xmlns:exmlns:foo,那么MXML解析器将会接收更改。改变并不是那么困难,我认为没有办法在默认情况下改变它生成命名空间的方式。