使用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代码(在注释标记的地方)?
答案 0 :(得分:0)
检查autocomplete.xbl
中的工作方式,更具体地说,检查<control-details>
内<metadata>
的内容。在这种情况下,表单生成器中通过控件设置对话框设置的值最终位于控件的resource="..."
属性中,并通过resource-avt
变量在XBL中访问。 / p>
(请注意,由于我们希望将值解释为AVT,并且在内部和外部范围内都可以访问该变量,因此存在一些复杂性,但希望此示例可以帮助您了解该想法。)