如何为此XBL控件添加设计时属性?

时间:2015-11-18 18:24:23

标签: orbeon

使用Orbeon,我有以下XBL用于简单控制:

<xbl:xbl xmlns:xh="http://www.w3.org/1999/xhtml"
     xmlns:xf="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:fr="http://orbeon.org/oxf/xml/form-runner"
     xmlns:saxon="http://saxon.sf.net/"
     xmlns:xbl="http://www.w3.org/ns/xbl"
     xmlns:xxbl="http://orbeon.org/oxf/xml/xbl"
     xmlns:nrs="http://nrs.foo/2014/xml/xbl">

<xbl:script src="/xbl/nrs/foo/foo.js"/>

<xbl:binding id="nrs-foo" element="nrs|foo" xxbl:mode="lhha binding value">

     <metadata xmlns="http://orbeon.org/oxf/xml/form-builder">
        <display-name lang="en">Foo</display-name>
        <templates>
            <view>
                <nrs:foo>
                    <xf:label ref=""/>
                    <xf:hint ref=""/>
                    <xf:help ref=""/>
                    <xf:alert ref=""/>
                </nrs:foo>
            </view>
        </templates>
    </metadata>

    <xbl:template>
        <xf:group xxbl:scope="outer">

            <xf:group xbl:attr="model context ref bind">

                <!-- Constructor -->
                <xf:group xxbl:scope="inner">
                    <xxf:script id="xf-en" ev:event="xforms-enabled">YAHOO.xbl.nrs.foo.instance(this).init();</xxf:script>
                </xf:group>

            </xf:group>

            <xf:input class="nrs-foo-json" ref="xxf:binding('nrs-foo')" xxbl:scope="inner" />

        </xf:group>
    </xbl:template>
</xbl:binding>

..并附带JS模块:

(function() {
var $ = ORBEON.jQuery;
var Document = ORBEON.xforms.Document;

YAHOO.namespace("xbl.nrs");
YAHOO.xbl.nrs.Foo= function() {};
ORBEON.xforms.XBL.declareClass(YAHOO.xbl.nrs.Foo, "xbl-nrs-foo");
YAHOO.xbl.nrs.Foo.prototype = {

    fooInput       : null,

    init: function() {
        var self = this;

        self.fooInput = $(this.container).find( '.nrs-foo-json' );

        // get design time property
    },

};
})();

如何修改XBL以获取设计时属性(比如一个名为&#39; URL&#39;的字符串,我可以在表单设计器的属性面板上配置),它存储在表单中定义,我可以访问JS代码(在注释标记的地方)?

1 个答案:

答案 0 :(得分:0)

检查autocomplete.xbl中的工作方式,更具体地说,检查<control-details><metadata>的内容。在这种情况下,表单生成器中通过控件设置对话框设置的值最终位于控件的resource="..."属性中,并通过resource-avt变量在XBL中访问。 / p>

(请注意,由于我们希望将值解释为AVT,并且在内部和外部范围内都可以访问该变量,因此存在一些复杂性,但希望此示例可以帮助您了解该想法。)