在dojo中查询商店以查找小于给定数字的数字

时间:2014-01-24 15:06:19

标签: javascript dojo

给出http://dojotoolkit.org/reference-guide/1.9/dojo/store/util/SimpleQueryEngine

中的示例
SimpleQueryEngine(function(object){
    return object.id > 1;
})(someData) // Returns an array with matching objects

我正在使用 DataStore http://livedocs.dojotoolkit.org/dojo/store/DataStore

DataStore包含 ItemFileWriteStore http://livedocs.dojotoolkit.org/dojo/data/ItemFileWriteStore

类型的商店

我正在尝试以下方法:

var myNumber = 12; // but could be any number like -12, 0.12, 12345 or -12345.1
dataStore.store.query(function(storeItem){
    return storeItem.number < myNumber;
})

并且这确实不起作用。

据我所知,SimpleQueryEngine使用dojo / _base / array,它使用一个过滤方法,该方法接受数组和回调函数等参数进行过滤。

正如您在此处看到的那样:https://github.com/dojo/dojo/blob/master/store/DataStore.js,DataStore使用SimpleQueryEngine,因此它应该可以工作......

我的商店包含以下对象:

[{id: 1, number: 2345},{id: 2, number: 23.45},{id: 3, number: -2345},{id: 4, number: 2345},{id: 5, number: 0.2345}]

我想查询给定商店以查找小于给定数字的数字。

澄清我真正想要理解的是为什么将函数作为参数传递给query()方法不起作用以及如何使其工作。

谢谢,

1 个答案:

答案 0 :(得分:2)

由于你有一个ItemFileWriteStore,你可以使用它的名为fetch的函数。它可能能够做你需要的。假设store是您的ItemFileWriteStore,您可以这样做:

store.fetch({
   sort: [{attribute: "number", descending: true}]
   onComplete: function(items, request) {
      // items will be an array of the items in your store, 
      // sorted by the "number" attributed in descending order
   }
});

onComplete函数中,您将根据number参数按降序排列存储项目数组。在这一点上,找到所有小于指定数字的数字(而不是你所说的只有1)是微不足道的。