我正在尝试-uncessfully-访问我的模型的实例,以便通过Js添加一些数据。我知道我可以通过添加带插入动作的触发器来做到这一点,但是我正在使用一些画布,所以我真的需要通过Js做同样的事情。
我添加了一个onLoad函数,该函数在已加载文档正文时触发。我试着用"实例"来获取实例。 xforms的动作,但它不被识别为函数。
var instanceElement = instance('application');
console.log( instanceElement);
我还尝试用以下方式获取实例:
document.getElementById(id);
但它返回null。那么,如何访问模型? 提前谢谢!
答案 0 :(得分:2)
直接调用XSLTForms代码会带来mantainance问题,因为有时对象名称会发生变化。
一个好主意是创建包装函数来封装常见的XSLTForms任务。
以下是您可以使用的部分内容:
function xf_getInstance(modelId, instanceId)
{
var model = window.document.getElementById(modelId);
var doc = model.getInstanceDocument(instanceId);
return doc;
}
function xf_getNode(context, path)
{
return XsltForms_browser.selectSingleNode(path, context);
}
function xf_changeNode(node, value)
{
XsltForms_globals.openAction("XsltForms_change");
XsltForms_browser.setValue(node, value || "");
document.getElementById(XsltForms_browser.getMeta(node.ownerDocument.documentElement, "model")).xfElement.addChange(node);
XsltForms_browser.debugConsole.write("Setvalue " + node.nodeName + " = " + value);
XsltForms_globals.closeAction("XsltForms_change");
}
function xf_fireEvent(targetId, eventName)
{
XsltForms_globals.openAction("XsltForms_dispatch");
XsltForms_xmlevents.dispatch(document.getElementById(targetId), eventName);
XsltForms_globals.closeAction("XsltForms_dispatch");
}
答案 1 :(得分:0)
var model = window.document.getElementById("model-id");
var ins = model.getInstanceDocument("instance-id");
console.log(ins.documentElement.textContent);