Динамически (Js) замена и проверка экземпляра XSLTForms

Я пытаюсь манипулировать экземпляром с помощью Js-кода, но безуспешно, потому что каждый раз, когда вы перезагружаете форму, экземпляр больше не работает, если он содержит атрибуты 'binding' как минимум на одном узле. Я знаю, что движок форм 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 ". Итак, я решил удалить все атрибуты, начиная с xsltforms_ XML, прежде чем сохранить его, и попытаться загрузить его снова, но он тоже не сработал.

Во всех случаях, кроме последнего, выдается следующее исключение: Ошибка отправки события 'xsltforms-revalidate': ... TypeError document.getElementById(...) имеет значение null

Итак, есть идеи, как динамически загружать и повторно проверять новый экземпляр из Javascript? Любая идея приветствуется, спасибо заранее!

1 ответ

Решение

Не было никаких проблем с манипулированием структурой экземпляра с помощью JavaScript. Проблема была из-за обязательных объявлений, которые я использовал в подчиненной форме, чтобы заблокировать пользователя для изменения данных вручную. Например

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

Я удалил это, и все прошло хорошо, поэтому я решил сделать этот ввод только для чтения через Js... Так просто.

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

Другие вопросы по тегам