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,(答案已更新)您想要完成的任务不清楚。请解释您试图通过查询实现的目标(即,您希望匹配的组合条件是什么,明确的)?我在对你的问题的第一次评论中提出了这个问题(尽管没有那么明确)。请将此信息包括在内。我现在问这个,最初问这个,因为你使用的查询和你用它做的事情不匹配(这可能是你的问题)。没有这些信息,每个人都必须猜测。