2016-06-25 11 views
0

Angenommen, ich verwende d3.xml() innerhalb einer Funktion, um ein SVG-Asset in den Browser zu laden. Wenn ich eine Callback-Funktion ("cb") aufrufen möchte, sobald das Asset in den Speicher geladen wurde, wie würde ich dies tun?Callback-Funktion an d3.xml übergeben?

Als Beispiel-Code, habe ich versucht, die folgenden:

var svg_xml = null; 
var load_svg = function(svg_path, cb) { 
    d3.xml(svg_path, "image/svg+xml", function(error, xml) { 
     if (error) throw error; 
     svg_xml = xml; 
     if (cb) cb; 
    }); 
}; 

Dann einen Rückruf an anderer Stelle im Skript zu testen:

load_svg("/foo/bar/baz.svg", function() { 
    console.log("baz.svg loaded!"); 
}); 

Der SVG wird schließlich in den Speicher geladen. Der Rückruf wird jedoch nicht aufgerufen - keine Protokollmeldung.

Gibt es ein Problem mit dem Bereich für cb innerhalb load_svg, so dass d3.xml() nicht weiß, was cb ist?

Antwort

2

Sie haben vergessen, nur die Callback-cb()

var svg_xml = null; 
var load_svg = function(svg_path, cb) { 
    d3.xml(svg_path, "image/svg+xml", function(error, xml) { 
     if (error) throw error; 
     svg_xml = xml; 
     if (cb) cb(); 
    }); 
}; 
zu nennen