Функция mxGraph -Save не работает локально

Я скачал открытый исходный код https://github.com/jgraph/mxgraph из Git, это приложение Сохранить функциональность не работает локально. Есть ли возможность запустить функцию сохранения локально? требуется ли для этого какая-либо конфигурация? пожалуйста, помогите мне.

введите здесь описание изображения

После нажатия кнопки «Сохранить» появляется сообщение об ошибке ниже

введите здесь описание изображения


person Sajith    schedule 19.06.2019    source источник
comment
Чего вы хотите добиться с помощью этого сохранения/экспорта? Скачать черновик текущего графика, чтобы потом можно было его импортировать? Скачать файл .svg?   -  person NickAth    schedule 20.06.2019
comment
@NickAth, я хочу сохранить текущую отображаемую диаграмму, но не могу этого сделать, появляется сообщение об ошибке, как только я нажимаю кнопку «Сохранить», время показывает одно всплывающее окно для выбора типа сохранения, такого как svg, xml и т. д. ... Затем я выбираю xml или выберите любой другой вариант, затем нажмите кнопку «Сохранить», после чего отобразится сообщение об ошибке. Требуется ли какая-либо локальная конфигурация для сохранения функций?   -  person Sajith    schedule 20.06.2019
comment
Вы настроили внутренний сервер? MxGraph состоит из двух частей: внешнего интерфейса JS и html и внутреннего интерфейса java|php|.Net. Бэкенд необходим для сохранения   -  person Andrew Core    schedule 20.06.2019
comment
Я предполагаю, что @AndrewCore предлагает вам настроить серверную часть для применения этой функции сохранения, однако есть способы сохранить вашу диаграмму в формате xml (который вы можете повторно использовать для загрузки позже), используя только Javascript на стороне клиента, если вы заинтересованы в этом, я мог бы предоставить фрагмент кода.   -  person NickAth    schedule 20.06.2019
comment
Это пример GraphEditor, у него есть README, github.com/jgraph /mxgraph/дерево/мастер/javascript/примеры/   -  person Thomas the Tank Engine    schedule 21.06.2019
comment
@NickAth, предоставьте фрагмент кода.   -  person Sajith    schedule 24.06.2019


Ответы (2)


Я предоставляю фрагменты кода для локального сохранения и загрузки сохраненного файла.

код для экспорта xml текущего объекта графика

let encoder = new mxCodec();
let result = encoder.encode(graph.getModel());
let xml = mxUtils.getXml(result);
//workaround for the xml export, do not include the <mxGraphModel> tags
xml = xml.substring(xml.indexOf("<mxGraphModel>")+"<mxGraphModel>".length, xml.indexOf("</mxGraphModel>"));

код для загрузки XML-файла для повторного создания сохраненного состояния графика

let doc = mxUtils.parseXml(xml);
let codec = new mxCodec(doc);
codec.decode(doc.documentElement, graph.getModel());
let elt = doc.documentElement.firstChild;
let cells = [];
while (elt != null)
{   
    let cell = codec.decode(elt)
    if(cell != undefined){
            if(cell.id != undefined && cell.parent != undefined && (cell.id == cell.parent)){
                elt = elt.nextSibling;
                continue;
            }
            cells.push(cell);
    }
    elt = elt.nextSibling;
}
graph.addCells(cells);
person NickAth    schedule 24.06.2019
comment
@NickAuth, я использовал этот код let result = encoder.encode(graph.getModel()); но консоль выдает ошибку "График не определен". Как я могу объявить график? - person Bala; 15.07.2019
comment
@Bala кажется, что вы не создали ни одного объекта graph, который является основным объектом для mxgraph для создания диаграммы, не могли бы вы показать мне код, который вы использовали до сих пор, или создать другой вопрос? - person NickAth; 15.07.2019
comment
@NickAuth, я могу получить весь XML, используя локальное хранилище, как показано ниже, Editor.useLocalStorage = true; var temp = localStorage['testing.xml']; но согласно моему требованию я должен получить XML без использования локального хранилища. - person Bala; 15.07.2019
comment
@NickAuth, я использовал этот let encoder = new mxCodec(); пусть результат = encoder.encode(graph.getModel()); пусть xml = mxUtils.getXml (результат); Как создать объект графика? - person Bala; 15.07.2019
comment
Я вижу, что вы уже разместили здесь вопрос stackoverflow.com/questions/56899522/, давайте обсудим это там - person NickAth; 15.07.2019
comment
@NickAuth, я отредактировал вопрос stackoverflow.com/questions/56899522 - person Bala; 15.07.2019
comment
снова, на этот раз XML для диаграммы. Я использовал ваш фрагмент кода выше «код для загрузки xml для повторного создания сохраненного состояния графика», но получил исключение, как показано ниже. Uncaught TypeError: cell.getParent не является функцией в mxGraphModel.getParent (mxGraphModel.js:602) в mxGraph.cellsAdded (mxGraph.js:4658) в mxGraph.addCells (mxGraph.js:4621) - person Bala; 17.07.2019
comment
У меня есть сложный обходной путь для этого случая, но я не думаю, что он имеет отношение к этой теме, не могли бы вы обновить этот stackoverflow.com/questions/56899522 задать вопрос или открыть новый? - person NickAth; 17.07.2019

Вы можете сохранить локально, используя класс mxCodec из пакета IO. Ознакомьтесь с примером кода здесь. Я не уверен, как связать его с этой конкретной кнопкой, но найдите функцию, которая вызывается при нажатии кнопки «Сохранить», и добавьте/замените ее тремя строками, необходимыми для кодирования в виде xml.

Что касается того, как сохранить этот xml-код в виде файла, я не уверен. Возможно, вы найдете этот код, когда будете изменять функциональность кнопки сохранения. Простым способом было бы создать div и заменить его innerhtml данными xml, а затем просто скопировать его и сохранить самостоятельно.

person Andrew Core    schedule 21.06.2019
comment
мой блок кода здесь, SAVE_URL=C:\Sajith значение, как это Теперь нет ошибки, но xml не может СОХРАНИТЬ. Можете ли вы помочь мне здесь любой вопрос? - person Sajith; 27.06.2019
comment
Блок кода: ExportDialog.saveLocalFile = функция (editorUi, данные, имя файла, формат) { if (data.length ‹ MAX_REQUEST_SIZE) { editorUi.hideDialog(); var req = new mxXmlRequest(SAVE_URL, 'xml=' + encodeURIComponent(data) + '&filename=' + encodeURIComponent(filename) + '&format=' + format); req.simulate (документ, '_blank'); оповещение (документ); } else { mxUtils.alert(mxResources.get('drawingTooLarge')); mxUtils.popup(xml); } }; - person Sajith; 27.06.2019
comment
Честно говоря, я сам не уверен, в чем проблема, я тоже пытаюсь решить эту же проблему... Я думаю, что основная проблема в том, что я не могу вызвать диалоговое окно сохранения. Мое текущее решение состоит в том, чтобы взять закодированную диаграмму, которую я хочу сохранить, и установить document.body.innerHTML(xml);, а затем просто скопировать и сохранить ее вручную. - person Andrew Core; 28.06.2019
comment
Что именно происходит, когда вы запускаете свой код? Для меня нажатие кнопки «Сохранить» ничего не делает. - person Andrew Core; 28.06.2019
comment
@Sajith, надеюсь, ты сможешь получить xml из диаграммы. Не могли бы вы поделиться со мной? Я также борюсь с той же проблемой. - person Bala; 08.07.2019
comment
@Balamurugan Я смог получить его, установив переменную Editor.useLocalStorage = true; Теперь кнопка сохранения сохраняет xml в переменную окна localStorage. Откройте консоль и введите localStorage. Вы обнаружите, что это объект со свойствами, соответствующими XML-файлам, которые вы пытаетесь сохранить. Чтобы спасти их, я делаю var temp = localStorage['diagram.xml']; console.log(temp); - person Andrew Core; 08.07.2019
comment
@AndrewCore, я могу сохранить xml в локальном хранилище. Большое спасибо. Теперь я пытаюсь передать XML на следующую страницу, чтобы сохранить все элементы в базе данных. - person Bala; 13.07.2019
comment
@AndrewCore, есть ли возможные способы получить XML из графика без использования локального хранилища? - person Bala; 15.07.2019