【问题标题】:Querying a store in dojo to find a number that is less than a given number在 dojo 中查询商店以查找小于给定数字的数字
【发布时间】:2014-02-15 15:19:14
【问题描述】:

举个例子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() 方法不起作用以及如何使其起作用。

谢谢,

【问题讨论】:

    标签: javascript dojo


    【解决方案1】:

    既然你有一个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 函数中,您将拥有基于数字参数降序排列的商店项目数组。此时,找到小于您指定数字(而不是您所说的 1)的 所有 个数字将是微不足道的。

    【讨论】:

    • 你也可以使用 dataStore.store.query() 获取所有项目,但不是这样。只是为了澄清 dataStore.store - DataStore,dataStore.store.store - ItemFileWriteStore.
    • 也许我不明白你在做什么?使用 sort 参数,您可以将所有项目按“数字”排序。换句话说,您可以轻松地循环遍历并将“item[i]”与“myNumber”进行比较,如果它小于 myNumber,则将其存储。一旦你超过“myNumber”,你就会停止循环。这不是最终目标还是我误解了?
    • 我试图了解如何将函数作为参数传递给 dataStore.store.query() 方法,该方法将执行所有过滤我也试图了解它为什么不起作用,抱歉让我更新我的问题
    • 好的,我明白你现在在问什么。如果您查看链接页面代码上的 cmets (github.com/dojo/dojo/blob/master/store/DataStore.js),您会注意到函数查询采用参数“query”,它是一个对象,而不是一个函数。所以我不确定您是否可以按照您尝试的方式执行此操作...
    • 是的,您可以传入一个带有参数名称和值的对象,也可以是正则表达式,而且我很确定您可以覆盖查询方法。据我所见,它返回了一个 Deferred 对象,但是您可以在创建 DataStore 实例时覆盖 queryEngine 以及首选返回值...@Eric Alberson 无论如何感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 2011-11-18
    • 2013-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多