如何使用队列.js和 D3.js 加载多个文件
How to load multiple files with Queue.js and D3.js?
>情况
我正在尝试加载多个xml文件(位于服务器上),而无需声明硬编码文件的名称。为此,我正在尝试使用 d3.queue 库 https://github.com/d3/d3-queue。
我已经实现了 xml 来强制布局以满足我自己的需要 (https://bl.ocks.org/mbostock/1080941),但有一个关键缺陷,即我需要手动输入我要加载的 xml 文件的名称......
繁殖
给定(从 http://learnjsdata.com/read_data.html 调整示例):
queue()
.defer(d3.xml, "/mappings/Customer.hbm.xml")
.defer(d3.xml, "/mappings/Actor.hbm.xml")
.await(analyze);
function analyze(error, Customer, Actor) {
if(error) { console.log(error); }
// do stuff with Customer data, do stuff with Actor data
}
鉴于我对 xml 处理的实现:
d3.xml("mappings/Customer.hbm.xml","application/xml", function(error,xml){
if (error) throw error;
// do stuff with the data retrieved from Customer.hbm.xml
});
问题
如何以这样一种方式组合上述两个片段,以便我不必编写 xml 硬编码的位置并将所有参数传递给分析函数?任何朝着正确方向的推动将不胜感激。
在伪代码中,我尝试编写如下代码(但我无法让它工作):
- 函数从映射文件夹中获取 xml 的所有名称(可能使用 node.js fs.readdir 或 fs.readdirSync 方法,但我不确定这将如何工作)
- 对于每个 xml .defer(d3.xml, nameofxml)
- 将所有找到的名称作为参数传递给分析函数
在 Java 中,我会选择使用 var...参数,但我不知道如何在 JS 中做到这一点。
这个问题
实际上有两个部分:
- 如何将服务器端文件列表获取到客户端 JavaScript?
简短的回答是,如果没有可以返回该列表的服务器端 API,您就不会这样做。 根据您使用的后端,编写一个返回目标目录中文件的 JSON 数组的方法。 您首先调用它,获取响应,然后使用队列处理它们:
d3.json('/get/list/of/xml/files', function(error, fileArray){
var q = d3.queue();
fileArray.forEach(function(d){
q = q.defer(d3.xml, d);
});
q.await(analyze);
});
- 如何在 JavaScript 中处理可变数量的参数?
这实际上在 JavaScript 中得到了很好的支持。
function analyze(error) {
if(error) { console.log(error); }
// skip 0 it's error variable
for (i = 1; i < arguments.length; i++) {
var xml = arguments[i];
...
}
}
相关文章:
- JS文件的路径正在消失
- 我的外部js文件无法加载
- 在不破坏未定义函数的情况下,对多个视图使用单个js文件
- 动态加载和卸载js文件
- 如何将变量传递到另一个js文件
- 如何将所有JS文件连接到一个文件夹中
- 从Chrome扩展名中的popup.html文件在background.js文件中运行一个函数
- 如何使用php文件中的GET来获取我在.js文件中声明的变量
- 如何将模板中的标记脚本移动到.js文件中
- 什么's是连接供应商js文件的最佳方式
- 如何在定义js文件后为外部javascript文件设置变量
- 如何在JS文件中获取资源(.resx)字符串
- 将*.js文件的内容放入Object中
- 如何从onclick函数设置全局变量并将其传递给另一个JS文件
- 导致内容安全策略(CSP)冲突错误的本地jquery.js文件
- 如何使用Gmail运行.js文件
- 如何定义一个模块并使用它来分离js文件
- Angular JS文件上传到托管服务器
- 如何引用HTML中节点模块中的js文件
- 如何将JS文件从其他文件夹链接到页面