"假设您有一个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 的代码?如果是这样,那会怎么样?
答案 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));
}))
});
}