2

これが私のカスタムコントロールです:

<?xml version="1.0" encoding="UTF-8"?>

<xbl:xbl xmlns:xhtml="http://www.w3.org/1999/xhtml"
         xmlns:xforms="http://www.w3.org/2002/xforms"
         xmlns:xs="http://www.w3.org/2001/XMLSchema"
         xmlns:ev="http://www.w3.org/2001/xml-events"
         xmlns:xi="http://www.w3.org/2001/XInclude"
         xmlns:xxi="http://orbeon.org/oxf/xml/xinclude"
         xmlns:xxforms="http://orbeon.org/oxf/xml/xforms"
         xmlns:fr="http://orbeon.org/oxf/xml/form-runner"
         xmlns:saxon="http://saxon.sf.net/"
         xmlns:xbl="http://www.w3.org/ns/xbl">

    <metadata xmlns="http://orbeon.org/oxf/xml/form-builder">
        <display-name lang="en">Custom Controls</display-name>
    </metadata>

    <xbl:binding id="fb-input-country-selector" element="xforms|country-selector">
        <metadata xmlns="http://orbeon.org/oxf/xml/form-builder">
            <display-name lang="en">Country Selector</display-name>
            <icon lang="en">
                <small-icon>/forms/orbeon/builder/images/dropdown.png</small-icon>
                <large-icon>/forms/orbeon/builder/images/dropdown.png</large-icon>
            </icon>
            <datatype>xforms:string</datatype>
            <template>
                <xforms:select1 id="" appearance="minimal" ref="" xmlns="">
                    <xforms:label ref=""/>
                    <xforms:hint ref=""/>
                    <xforms:help ref=""/>
                    <xforms:alert ref="$fr-resources/detail/labels/alert"/>
                    <xforms:item>
                        <xforms:label>[Select...]</xforms:label>
                        <xforms:value/>
                    </xforms:item>
                    <xforms:itemset nodeset="doc('oxf:/apps/xforms-controls/services/countries.xml')/countries/country">
                        <xforms:label ref="name"/>
                        <xforms:value ref="us-code"/>
                    </xforms:itemset>
                </xforms:select1>
            </template>
        </metadata>
    </xbl:binding>
</xbl:xbl>

問題は、データ項目がXMLから取得されないことですが、テンプレート自体をフォーム構造に導入すると、機能します。

誰かアイデアはありますか?

4

1 に答える 1

3

XBLコンポーネントの作成には注意が必要です。少なくとも初めてそれをするとき。いくつかのこと:

  1. 混乱を避けるために、独自の名前空間でコンポーネントを定義することをお勧めします。以下の例では、を使用しxmlns:my="http://www.example.com/"ました。
  2. の内容はfb:template、コンポーネントの使用方法であり、実装ではありません。したがって、次のようになります。

    <fb:template>
        <my:country-selector>
            <xforms:label ref=""/>
            <xforms:hint ref=""/>
            <xforms:help ref=""/>
            <xforms:alert ref=""/>
        </my:country-selector>
    </fb:template>
    
  3. 実装は内部にありxbl:templateます。

  4. したがって、コンポーネントは実行時に見つけることができるので、ディレクトリに配置する必要がありますxbl/my/country-selector/country-selector.xbl。ディレクトリのmy一部は、次のプロパティを次のように追加することで名前空間にマップされますproperties-local.xml

    <property as="xs:string"  name="oxf.xforms.xbl.mapping.my"
                              value="http://www.example.com/"/>
    

    (多くの場合、ディレクトリとプレフィックスに同じ名前を使用しますが、同じである必要はありません。たとえば、fr:*コンポーネントは。というディレクトリにありorbeonます。)

  5. したがって、フォームビルダーはサイドバーにコンポーネントを表示します。次のようなプロパティを追加する必要があります。

    <property as="xs:string"  name="oxf.fb.toolbox.group.other.uri.*.*"
              value="oxf:/xbl/my/country-selector/country-selector.xbl"/>
    

そしてここに完全な情報源がありcountry-selector.xblます:

<xbl:xbl xmlns:xh="http://www.w3.org/1999/xhtml"
         xmlns:xforms="http://www.w3.org/2002/xforms"
         xmlns:xs="http://www.w3.org/2001/XMLSchema"
         xmlns:ev="http://www.w3.org/2001/xml-events"
         xmlns:xi="http://www.w3.org/2001/XInclude"
         xmlns:xxi="http://orbeon.org/oxf/xml/xinclude"
         xmlns:xxf="http://orbeon.org/oxf/xml/xforms"
         xmlns:my="http://www.example.com/"
         xmlns:saxon="http://saxon.sf.net/"
         xmlns:fb="http://orbeon.org/oxf/xml/form-builder"
         xmlns:xbl="http://www.w3.org/ns/xbl"
         xmlns:xxbl="http://orbeon.org/oxf/xml/xbl">

    <metadata xmlns="http://orbeon.org/oxf/xml/form-builder">
        <display-name lang="en">Custom Controls</display-name>
    </metadata>

    <xbl:binding id="my-country-selector" element="my|country-selector" xxbl:mode="lhha binding value">
        <fb:metadata>
            <fb:display-name lang="en">Country Selector</fb:display-name>
            <fb:icon lang="en">
                <fb:small-icon>/forms/orbeon/builder/images/dropdown.png</fb:small-icon>
                <fb:large-icon>/forms/orbeon/builder/images/dropdown.png</fb:large-icon>
            </fb:icon>
            <fb:datatype>xforms:string</fb:datatype>
            <fb:template>
                <my:country-selector>
                    <xforms:label ref=""/>
                    <xforms:hint ref=""/>
                    <xforms:help ref=""/>
                    <xforms:alert ref=""/>
                </my:country-selector>
            </fb:template>
        </fb:metadata>
        <xbl:template>
            <xforms:select1 appearance="minimal" ref="xxf:binding('my-country-selector')">
                <xforms:item>
                    <xforms:label>[Select...]</xforms:label>
                    <xforms:value/>
                </xforms:item>
                <xforms:itemset nodeset="doc('oxf:/forms/orbeon/controls/service/countries.xml')/countries/country">
                    <xforms:label ref="name"/>
                    <xforms:value ref="us-code"/>
                </xforms:itemset>
            </xforms:select1>
        </xbl:template>
    </xbl:binding>
</xbl:xbl>
于 2012-12-12T01:35:40.447 に答える