Доступ к экземплярам модели XForms/XSLTForms с помощью JavaScript

Я безуспешно пытаюсь получить доступ к экземплярам моей модели, чтобы добавить некоторые данные через Js. Я знаю, что могу сделать это, добавив триггер с действием вставки, но я работаю с некоторым холстом, поэтому мне действительно нужно сделать то же самое с помощью Js.

Я добавил функцию onLoad, которая срабатывает, когда тело документа уже загружено. Я попытался получить экземпляр с помощью действия "instance" xforms, но он не распознается как функция.

var instanceElement = instance('application');
console.log( instanceElement);

Я также попытался получить экземпляр с:

document.getElementById(id);

Но это вернуло ноль. Итак, как получить доступ к модели? Заранее спасибо!

2 ответа

Решение
var model = window.document.getElementById("model-id");
var ins = model.getInstanceDocument("instance-id");
console.log(ins.documentElement.textContent);

Прямой вызов кода 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"); 
}
Другие вопросы по тегам