为什么更改未保存在SVG-Edit的文件中?

时间:2018-11-16 06:41:42

标签: javascript svg

function FileLoad(file) {
    svgEditor.loadFromURL(file);
    var svg = document.getElementById("svgID");
    code continues....
}

我正在尝试在svg加载后对其进行操作。

但是代码没有进一步执行,开发人员工具中也没有显示

我正在使用SVG-Edit toool。

1 个答案:

答案 0 :(得分:1)

svgEditor.loadFromURL()返回一个Promise。从本质上讲,加载始终是异步操作。您需要等待直到完成:

function FileLoad(file) {
    svgEditor.loadFromURL(file).then(function () {
        var svg = document.getElementById("svgID");
        // code continues....
    }, function (error) {
        // load error handling
    });
}

从函数的命名来看,好像您将其用于实例化对象一样。但是,使用FileLoad函数时,请注意SVG内容将不会同步提供,只有在诺言解决之后才可用。在使用new进行调用的情况下,可能的模式如下所示(callback函数包含您对实例化对象所做的所有操作):

function FileLoad(file, callback) {
    svgEditor.loadFromURL(file).then(function () {
         var svg = document.getElementById("svgID");
         code continues....
    }, function (error) {
        // load error handling
    }).then(callback.bind(this));
}

fileInstance = new FileLoad(url, callback);

编辑:该功能在4.0.0版中更改了其签名。对于3.2.0及更早版本,您可以在配置对象中need to pass使用回调函数:

function FileLoad(file) {
    svgEditor.loadFromURL(file, {
        callback: function (success) {
            if (success) {
                 var svg = document.getElementById("svgID");
                 // code continues....
            } else {
                // load error handling
            }
        }
    });
}