自定义控件:来自 XML 文件的下拉值 [英] Custom control: dropdown values from XML file

查看:51
本文介绍了自定义控件:来自 XML 文件的下拉值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我的自定义控件:

<?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 中抓取的,但是如果我在表单结构中引入模板本身,它就可以工作.

The problem is that the data items are not grabbed from the XML, but if I introduce the template itself in the form structure, it works.

有人有什么想法吗?

推荐答案

创建 XBL 组件很棘手.至少你第一次这样做.几点:

Creating XBL components is tricky. At least the first time you do it. A few things:

  1. 为避免混淆,我建议您在自己的命名空间中定义组件.在下面的示例中,我使用了 xmlns:my="http://www.example.com/".
  2. fb:template 的内容是使用组件的样子,而不是它的实现.所以,它应该看起来像:

  1. To avoid confusions, I recommend you define components in your own namespace. In the example below, I used xmlns:my="http://www.example.com/".
  2. The content of fb:template is how using the component looks like, not its implementation. So, it should look like:

<fb:template>
    <my:country-selector>
        <xforms:label ref=""/>
        <xforms:hint ref=""/>
        <xforms:help ref=""/>
        <xforms:alert ref=""/>
    </my:country-selector>
</fb:template>

  • 实现在xbl:template中.

    所以组件可以在运行时找到,你需要把它放在目录xbl/my/country-selector/country-selector.xbl.通过在 properties-local.xml 中添加以下属性,将目录的 my 部分映射到命名空间:

    So the component can be found at runtime, you need to place it in a directory xbl/my/country-selector/country-selector.xbl. The my part of the directory is mapped to the namespace by you adding the following property in your properties-local.xml:

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

    (通常,我们对目录和前缀使用相同的名称,但它们不必相同.例如,fr:* 组件位于名为 的目录中orbeon.)

    (Often, we use the same name for the directory and the prefix, but they don't need to be the same. E.g. the fr:* components are in a directory called orbeon.)

    因此 Form Builder 在侧边栏中显示您的组件,您需要添加一个属性,如:

    So Form Builder shows your component in the sidebar, you need to add a property like:

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

  • 这里是 country-selector.xbl 的完整源代码:

    And here is the full source for 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>
    

    这篇关于自定义控件:来自 XML 文件的下拉值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

    查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆