如何与动态加载的文件中的(变量名称未知)javascript对象进行交互

时间:2015-04-24 15:02:14

标签: javascript d3.js queue.js

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,与显示hereload_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。)

谢谢!

0 个答案:

没有答案