【发布时间】:2017-11-02 14:05:05
【问题描述】:
我正在尝试编写一些简单的 Javascript,它使用 Trello API 从我的帐户中获取所有板/列表/卡片并将它们添加到可排序的表中(使用 Datatables jquery 插件)。
到目前为止,我已经设法编写了一个 jsfiddle,它可以获取所有这些信息并将其写入页面,但我不知道如何将所有这些信息存储到某种数据结构中,然后可以将其传递给数据表插件。
这是我目前从 Trello 获取数据的小提琴:
var carddata = [];
Trello.members.get("me", function(member) {
$("#fullName").text(member.fullName);
var boardUrl = "";
boardUrl = "members/me/boards";
Trello.get(boardUrl, function(boards) {
$.each(boards, function(ix, board) {
Trello.get("/boards/" + board.id + "/lists", function(lists) {
$.each(lists, function(ix, list) {
Trello.get("lists/" + list.id + "/cards", function(cards) {
$.each(cards, function(ix, card) {
console.log("boardname: " + board.name + "; list name: " + list.name + "; card name: " + card.name);
carddata.push(
"boardname: " + board.name +
"; list name: " + list.name +
"; card name: " + card.name
);
var $tablerow = "";
$tablerow = $(
"<tr><td>" + board.name +
"</td><td>" + list.name +
"</td><td>" + card.name +
"</td></tr>"
).appendTo("#table_body");
});
/*
for (i = 0; i < carddata.length; i++) {
console.log("carddata: " + carddata[i]);
}
*/
});
});
});
});
});
});
// **** carddata array is empty at this point ****
for (i = 0; i < carddata.length; i++) {
console.log("carddata: " + carddata[i]);
}
它遍历所有板、列表和卡片,当前将它找到的内容添加到 html 表(以及数组)中。然后,我使用 Datatables 插件将该 HTML 表更改为可排序表。
但是插件将 HTML 表视为空(据我所知),我认为这是因为在 Javascript 以 HTML 构建表之前调用了插件代码。
因此,我计划将所有数据添加到一个数组中,然后将该数组作为数据源传递到数据表中,但是我看不到如何使该数组在内部循环之外可访问。通过进行一些搜索,我认为这与闭包和范围有关,但我很难理解它们是如何工作的(我对 Javascript 很陌生)。
有没有人能帮助我让这个基本代码工作并告诉我我做错了什么?
谢谢, 大卫。
【问题讨论】:
-
在所有 GET 请求完成之前,您的
carddata数组不会被更改。$.get是一种异步方法,这意味着它将在脚本其余部分的每个其他同步过程之后运行。您应该阅读 JavaScript 中的 AJAX 和回调。 -
此外,您无需在 JavaScript 中遍历数组即可将其打印到控制台。只需
console.log(carddata)应该可以正常工作。 -
好的,谢谢 Dogui。我一直在查看回调的示例,但正在努力将它们应用到我的具体案例中 - 您是否知道任何可以帮助的资源或示例(除了通常的搜索)
-
希望此视频对您有所帮助:What the heck is the event loop anyway?
-
好的,谢谢你的视频 dogui - 跳过它看起来非常有用。我会抽出一些时间来看看它是否有帮助。
标签: javascript trello