Firefox 如何在书签工具栏中创建属于特定组的项目数组?
供参考: 它不起作用:Firefox 如何在书签工具栏中创建属于特定组的项目数组?,firefox,firefox-addon,firefox-addon-sdk,Firefox,Firefox Addon,Firefox Addon Sdk,供参考: 它不起作用: let { search, Bookmark, Group, Seperator, save, remove, MENU, TOOLBAR, UNSORTED } = require("sdk/places/bookmarks"); var du = []; search({ group: TOOLBAR }).on("data", function (item) { if (item.group.title == "workMode990") {
let { search, Bookmark, Group, Seperator, save, remove, MENU, TOOLBAR, UNSORTED } = require("sdk/places/bookmarks");
var du = [];
search({ group: TOOLBAR }).on("data", function (item) {
if (item.group.title == "workMode990") {
du[du.length] = item;
console.log("mary", du);
//item.group = UNSORTED;
//save(item);
}
});
如何创建数组,例如书签面板的顺序?您的代码可能会,也可能不会按照编写的方式工作。很可能您没有考虑函数是异步的这一事实 我可能会编写与您不同的代码:
let { search, Bookmark, Group, Separator,
save, remove, MENU, TOOLBAR, UNSORTED } = require("sdk/places/bookmarks");
//Note: your code has a spelling error in the above line: Seperator should be Separator
var du;
var duValid = false;
search({ group: TOOLBAR }).on("end", function (searchResultArray) {
//This is executed when the search has completed.
// searchResultArray is an ordered list of bookmark items.
du = searchResultArray.filter( function(resultItem) {
//When done testing (console logging), only the following line is needed:
//return resultItem.group.title === "workMode990";
if (resultItem.group.title === "workMode990") {
console.log("Valid resultItem: ", resultItem);
return true;
} //else
console.log("Rejected resultItem: ", resultItem);
return false;
});
duValid = true;
//du is valid here. Perform whatever else you are going to do with it here, or
// call a function that continues processing.
});
//du is not valid here.
我将使用以下代替的原因:
search().on(“end”)
事件,以了解搜索何时完成以及您是否拥有所有有效数据。如果您没有捕获此事件,则无法知道搜索何时完成search().on
会导致代码处理找到的每个数据项的事件。您实际上不需要以这种方式处理它,它会导致处理每个事件而不是单个事件的额外开销。如果您认为内存有限,那么这可能是一个更好的解决方案。但是,根据搜索的内部处理,这样做实际上可能不会节省任何内存resultItem
s控制台的一个重要原因是,根据当前的逻辑,我希望您在du
中不会得到任何结果。虽然我还没有测试它,但我的期望是您的搜索({group:TOOLBAR})
应该返回书签工具栏中的所有书签。但是,您可以过滤掉不在workMode990
组中的所有书签。这将过滤掉所有书签,因为它不是工具栏
因为你没有回答我最初的问题“你期望得到什么?”所以不可能确定你实际上想要实现什么。因此,有必要进行猜测
我猜想,您试图做的是在workMode990
组中查找所有书签。如果是这种情况,应采取以下措施:
let { search, Bookmark, Group, Separator,
save, remove, MENU, TOOLBAR, UNSORTED } = require("sdk/places/bookmarks");
//Note: your code has a spelling error in the above line: Seperator should be Separator
var du;
var duValid = false;
search({ group: "workMode990" }).on("end", function (searchResultArray) {
//This is executed when the search has completed.
// searchResultArray is an ordered list of bookmark items.
du = searchResultArray;
duValid = true;
//du is valid here. Perform whatever else you are going to do with it here, or
// call a function that continues processing.
});
//du is not valid here.
这是如何不起作用的(即,你得到了哪些你不期望的东西)?你希望得到什么?您的控制台输出是什么?您不显示如何/何时使用
du
中的数据。因此,我们真的不可能评估您是否正确地使用生成的数据。在这里,最常见的问题是异步问题,它会导致某些人出现问题。这意味着在此代码之后,du
的内容立即无效。如果您没有说明此函数是异步的,那么您会觉得它不工作。search({group:TOOLBAR})代码>。。。完全不起作用。这是bug API吗?当我使用group:TOOLBAR
时。什么都不要付。当我使用这个例子时。标记
或查询
`search({query:“mozilla”});它搜索,但只搜索书签。组不进行搜索。@lukaszpolowczyk,(答案已更新)您想要完成的任务不清楚。请解释您试图通过查询实现的目标(即,您希望匹配的组合条件是什么,明确的)?我在对你的问题的第一次评论中提出了这个问题(尽管没有那么明确)。请将此信息包括在内。我现在问这个,最初问这个,因为你使用的查询和你用它做的事情不匹配(这可能是你的问题)。没有这些信息,每个人都必须猜测。