如何将范围过滤器/查询添加到Dojo ItemFileReadStore

时间:2016-09-02 15:21:54

标签: javascript dojo dojox.grid.datagrid

"假设您有一个JSON,它是Dojo ItemFileReadStore的源,该存储是Dojo DataGrid的基础,名为bdayGrid,每行有两个属性," name"和"生日"。让我们说生日以yyyy-mm-dd格式存储(即1998-03-14):

{
  "items": [
    { "name": "Bob", "birthdate": { "_type": "Date", "_value": "1965-08-20"},
    { "name": "Jack", "birthdate": { "_type": "Date", "_value": "1969-11-12"},
    { "name": "Will", "birthdate": { "_type": "Date", "_value": "1998-04-20"}
  ]
}

假设您还存储了两个定义日期范围的有效日期:

var beginDate = "1995-01-05";
var endDate = "2016-01-01";

那么如何在ItemFileReadStore上编写一个有效过滤该日期范围的查询?通过单个值过滤似乎很容易;你编写类似的东西:

 bdayGrid.filter({birthday: "1965-08-20"});

但是如何传入高/低值对来过滤范围内的日期?您是否需要编写自定义Dojo DataStore QueryEngine 的代码?如果是这样,那会怎么样?

1 个答案:

答案 0 :(得分:0)

我认为过滤机制不适合此应用程序。

我会在数据中添加另一个布尔字段(例如_show)并过滤该字段。然后我会遍历商店项目,检查它们是否与我的日期范围匹配,并相应地设置布尔字段。

我认为您需要使用ItemFileWriteStore才能更改此字段。

使用Date作为日期也可能更容易。

function filter(/*Date*/ startDate, /*Date*/ endDate){
  store.fetch({
    onItem: function(item){
      var date = store.getValue(item, '_value');
      store.setValue(item, '_show', (startDate <= date) && (date <= endDate));
    }))
  });
}