从Orbeon 2018.1开始,ORBEON javascript对象的加载方式发生了变化。以下内容曾用于2017.2.2和3.9版本。
目标:我想使用适当的语言加载TinyMCE小部件。为此,我曾经有这样的代码:
<xh:script type="text/javascript">
var lang = ORBEON.xforms.Document.getValue('language') ? ORBEON.xforms.Document.getValue('language').split('-')[0] : 'en';
var TINYMCE_CUSTOM_CONFIG = {
language: lang,
...
这个html / head代码在版本2018.1中失败,因为ORBEON对象是“未定义的”。
我尝试将变量lang
移动到我的模型,如下所示:
<xf:instance id="language">
<language/>
</xf:instance>
<xf:action ev:observer="language" ev:event="xxforms-value-changed">
<xxf:script>
var lang = ORBEON.xforms.Document.getValue('language') ? ORBEON.xforms.Document.getValue('language').split('-')[0] : 'en';
TINYMCE_CUSTOM_CONFIG.language = lang;
</xxf:script>
</xf:action>
但现在代码失败了,因为它说“java.lang.IllegalArgumentException:找不到id language
的控件”
我在这里错过了什么?
通常,假设在到达内联脚本时已加载所有内容是危险的。最好将JavaScript初始化推迟到以后的时间。
默认情况下,Orbeon Forms 2018.1 no longer includes inline scripts因此延迟了JavaScript初始化。这主要是为了帮助CSP标题。您可以使用该属性重新启用内联脚本(请参阅doc),但将您自己的初始化推迟到以后可能仍然会更好。