使用javascript访问XForms/XSLTForms模型实例

使用javascript访问XForms/XSLTForms模型实例,xforms,xsltforms,Xforms,Xsltforms,我正在尝试——毫无保留地——访问我的模型的实例,以便通过Js添加一些数据。我知道我可以通过添加一个带有插入操作的触发器来实现这一点,但是我正在使用一些画布,所以我确实需要通过Js来实现同样的操作 我添加了一个onLoad函数,该函数在文档主体已经加载时触发。我尝试使用xforms的“instance”操作获取实例,但它没有被识别为函数 var instanceElement = instance('application'); console.log( instanceElement); 我还

我正在尝试——毫无保留地——访问我的模型的实例,以便通过Js添加一些数据。我知道我可以通过添加一个带有插入操作的触发器来实现这一点,但是我正在使用一些画布,所以我确实需要通过Js来实现同样的操作

我添加了一个onLoad函数,该函数在文档主体已经加载时触发。我尝试使用xforms的“instance”操作获取实例,但它没有被识别为函数

var instanceElement = instance('application');
console.log( instanceElement);
我还尝试通过以下方式获取实例:

document.getElementById(id);
但它返回空值。那么,如何访问模型呢?
提前谢谢

直接调用XSLTForms代码会带来维护问题,因为有时对象名称会更改

var model = window.document.getElementById("model-id");
var ins = model.getInstanceDocument("instance-id");
console.log(ins.documentElement.textContent);
一个好主意是创建包装器函数来封装常见的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"); 
}

直接调用XSLTForms代码会带来维护问题,因为有时对象名称会更改

一个好主意是创建包装器函数来封装常见的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"); 
}

直接调用XSLTForms代码会带来维护问题,因为有时对象名称会更改

一个好主意是创建包装器函数来封装常见的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"); 
}

直接调用XSLTForms代码会带来维护问题,因为有时对象名称会更改

一个好主意是创建包装器函数来封装常见的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"); 
}