我试图通过 Js 代码操作一个实例,但根本没有成功,因为每次重新加载表单时,如果它在至少一个节点中包含“绑定”属性,则该实例将不再工作。我知道 XSLT 表单引擎每次加载时都会采用一些新值,并且我的本地保存的实例文件必须“重新验证”,但我真的找不到这样做的方法。
我做了一些尝试,它们奏效了,但在我关闭表格之前他们一直在这样做。每次我重新打开表单(并且加载了 XSLTForms 引擎的新实例)时,它们都无法再加载了。
var model = document.getElementById('my-model').xfElement;
window.XsltForms_globals.openAction("XsltForms_change");
xmlToLoadIn.parentNode.replaceChild(newXmlNode,xmlToLoadIn);
model.xfElement.addChange(newXmlNode);
window.XsltForms_globals.closeAction("XsltForms_change");
同样通过注入 xml 对象:
model.defaultInstance.src = "";
model.defaultInstance.srcXML = newXmlNode;
甚至尝试所有我认为可能的魔术方法:
model.rebuild();
model.recalculate();
model.revalidate();
也与实例:
model.defaultInstance.revalidate();
model.defaultInstance.validate_(newXmlNode);
model.defaultInstance.validation_(newXmlNode);
在不破坏应用程序的情况下唯一有效的是:
model.defaultInstance.setDoc(newXmlNode);
但它并没有真正起作用,因为该实例从未加载,当我导航到下一个子表单时,会显示一条消息:无法解析 XML。
在所有情况下,除了刚刚擦除实例的最后一个,实例属性总是相同的,所以我认为这些值没有被重新验证。例如 xsltforms_depfor="44 48 52 58 8 12 18 4"。因此,我决定在保存之前删除 XML 的所有以 xsltforms_ 开头的属性,然后尝试再次加载它,但它也不起作用。
在所有情况下,除了最后一种情况,都会引发以下异常:错误调度事件 'xsltforms-revalidate': ... TypeError document.getElementById(...) is null
那么,知道如何从 Javascript 动态加载和重新验证新实例吗?欢迎任何想法,提前谢谢!