2

有没有内置的方法来获取 dojo/store(尤其是 dojo/MemoryStore)中的所有记录?就像是:

store.query('*');

?

4

2 回答 2

3

解决方案很简单。调用 Store 实例的查询方法。

store.query();

这里是dojo/store/util/SimpleQueryEngine的源码。版本 Dojo 1.8。如您所见,如果查询未定义,它将始终返回True

    switch(typeof query){
    default:
        ...

    case "object": case "undefined":
        var queryObject = query;
        query = function(object){
            for(var key in queryObject){
                var required = queryObject[key];
                if(required && required.test){
                    // an object can provide a test method, which makes it work with regex
                    if(!required.test(object[key], object)){
                        return false;
                    }
                }else if(required != object[key]){
                    return false;
                }
            }
            return true;
        };
        break;
    case "string":
        ...

    case "function":
        ...
}   
function execute(array){
    // execute the whole query, first we filter
    var results = arrayUtil.filter(array, query);

    ...
    ...

    return results;
}

如果文档混淆或丢失,则有必要阅读 dojo 源代码。希望答案会有所帮助。:)

于 2012-10-23T01:55:39.387 回答
1

似乎答案非常简单。您只需直接访问 data 属性。

var allData = store.data;

这适用于 MemoryStores。我不知道它是否适用于需要远程加载数据的商店。

于 2012-10-22T10:02:14.850 回答