首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用Queue.js和D3.js加载多个文件?

如何用Queue.js和D3.js加载多个文件?
EN

Stack Overflow用户
提问于 2016-03-19 14:34:16
回答 1查看 1.1K关注 0票数 1

情况

我试图加载多个xml文件(位于服务器上),而不需要声明硬编码文件的名称。为此,我尝试使用d3队列库https://github.com/d3/d3-queue

我已经实现了xml以强制布局到我自己的需要(https://bl.ocks.org/mbostock/1080941),但是有一个关键的缺陷,就是我需要手动输入我想要加载的xml文件的名称。

再生产

给出(来自data.html的调整示例):

代码语言:javascript
复制
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的实现:

代码语言:javascript
复制
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硬编码的位置,并将所有参数传递给analyze函数?如能朝正确的方向前进,我将不胜感激。

在psuedocode中,我尝试编写如下代码(但我无法让它工作):

  1. 函数从映射文件夹中获取xml的所有名称(可能使用node.js fs.readdir或fs.readdirSync方法,但我不确定它究竟是如何工作的)。
  2. 对于每个xml .defer(d3.xml,nameofxml)
  3. 将所有找到的名称作为参数传递给analyze函数。

在Java中,我会选择用一个var...args来完成这个任务,但是我不知道如何在JS中这样做。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-19 15:53:15

这个问题有两部分:

  1. 如何将服务器端文件列表发送给客户端JavaScript?

简单的回答是,如果没有服务器端api,就可以返回该列表。根据所使用的后端,编写一个返回目标目录中文件的JSON数组的方法。首先调用它,获取响应,然后使用queue处理它们:

代码语言:javascript
复制
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);
});
  1. 如何在JavaScript中处理可变数量的参数?

这实际上是在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];
    ...
  }
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36102992

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档