Mike Bostock的queue.js库目前允许我将可变数量和类型的文件(css,json,js等)加载到新生的单页浏览器应用程序中:
d3.json("files_to_load.json", function(data) {
var q = queue(1);
data.forEach(function(d, i) {
q.defer(load_file, d.filename, d.filetype);
});
q.awaitAll(function(error, results) {
console.log("results.toSource()=" + results.toSource());
});
});
...其中:
load_file()
只是构建一个脚本规范,用于附加到DOM,与显示here的load_image()
函数非常相似。 queue.awaitAll()结果(此处为成功但极端情况包含9个文件)显示一组看似无用的(void 0)
,即undefined
个对象:
results.toSource()=[(void 0), (void 0), (void 0), (void 0), (void 0), (void 0), (void 0), (void 0), (void 0)]
其中某个地方总是代表加载包含简单闭包的js文件,其变量名称是未知和不同,但其 interface是标准的:
var closure_with_var_name_unknown = function() {
var id = "";
var privateFunction = function() {
// use id in a way specific to this file
}
return {
callPrivateFunc : function() {
privateFunction();
},
customise : function(what, val) {
id = val; // in a switch (what) case statement
}
}
}();
所以,将这个js文件加载到DOM中,并假设customize()是所有这些js文件和闭包的共同点,我想获取当前闭包变量的句柄为了调用自定义,如:
closure_with_var_name_unknown.customise("id", d.id);
如果在q.awaitAll()回调函数的成功块中发生这种情况会很好。 : - )
策略建议? (请不要jQuery。)
谢谢!