动态(Js)替换和验证XSLTForms实例

时间:2015-05-07 17:24:12

标签: xforms xsltforms

我试图通过Js代码操作实例而根本没有成功,因为每次重新加载表单时,如果实例包含'绑定'在一个节点处的属性。我知道XSLT表单引擎在每次加载时都会获取一些新值,并且我的-locally saved-instance文件必须经过重新验证",但我真的找不到这样做的方法。

我做了一些尝试,他们工作了,但他们这样做直到我关闭表格。每次我重新打开表单(并加载一个新的XSLTForms引擎实例)时,它们就不能再加载了。

request.GET.getlist('status')

同样通过注入xml对象:

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");

甚至尝试我能看到的所有可能的魔术方法:

model.defaultInstance.src = "";
model.defaultInstance.srcXML = newXmlNode;

还有实例:

model.rebuild();
model.recalculate();
model.revalidate();

唯一没有破坏应用程序的工作是:

model.defaultInstance.revalidate();
model.defaultInstance.validate_(newXmlNode); 
model.defaultInstance.validation_(newXmlNode);

但它并没有真正起作用,因为实例永远不会被加载,当我导航到下一个子表单时,会显示一条消息:无法解析XML。

在所有情况下,除了刚删除实例的最后一个,实例属性总是相同的,所以我认为这些值没有被重新验证。例如。 xsltforms_depfor =" 44 48 52 58 8 12 18 4"。因此,我决定在保存之前删除以XML的xsltforms_开头的所有属性,并尝试再次加载它,但它也没有工作。

在所有情况下,除了最后一个,抛出以下异常:错误调度事件' xsltforms-revalidate':... TypeError document.getElementById(...)为null

那么,任何想法如何从Javascript动态加载和重新验证新实例?任何想法都是受欢迎的,提前谢谢!

1 个答案:

答案 0 :(得分:0)

通过javascript操作实例结构完全没有问题。问题是由于我在子窗体中使用的绑定声明阻止用户手动修改数据。 E.g。

<xf:bind nodeset="/application/params/param[@id='id']" readonly="true()" />
<xf:bind nodeset="/application/params/param[@id='description']" readonly="true()" />

我删除了它,一切都没问题,所以我决定通过Js只读取这些输入......就这么简单。

关键是元素被分配给当前子表单,部分属性依赖于该数字。当你加载一个不同的实例时,xsltform引擎重启“subforms count”并重新开始,这似乎会混淆引擎并抛出错误,因为无法绑定绑定元素。