1

假设我们有一个像这样的嵌套数据结构:

[
   {  
     "name": "fruits",
     "items": [
        { "name": "apple" ...}
        { "name": "lemon" ...}
        { "name": "peach" ...}
     ]
   }
   {
     "name": "veggies", 
     "items": [
        { "name": "carrot" ...}
        { "name": "cabbage" ...}
     ]
   } 
   { 
     "name": "meat",
     "items": [
       { "name": "steak" ...}
       { "name": "pork" ...}
     ]
   }
]

以上数据放在一个dojo/store/Memory中。我想对包含字母“c”的项目执行查询,但仅限于较低级别(不想查询类别)。

使用通用 dojo/store/Memory,它的查询功能仅在顶层应用过滤器,因此代码

store.query(function(item) {
    return item.name.indexOf("c") != -1;
});

只会对类别名称(水果、蔬菜等)而不是实际项目执行查询。

是否有一种直接的方法可以在子节点上执行此查询,如果匹配,则返回所有子节点以及父节点?例如,“c”查询将返回“fruits”节点及其“peach”子节点,“veggies”将保持原样,“meat”将完全排除在查询结果之外。

4

1 回答 1

2

您当然可以在商店的查询方法中定义自己的检查方法。我不检查这段代码是否完美运行,但我想你几乎可以得到它的意思。

store.query(function(item) {
    var found = {
        name: "",
        items: []
    };
    var children = item.items;
    d_array.forEach(children, function(child) {
        if (child.name.indexOf("c") != -1) {
            found.name = item.name;
            found.items.push(child); 
        }
    });
    return found;
});

希望这可以帮助。

于 2013-11-06T11:20:16.990 回答