2016-09-02 2 views
0

«Предположим, у вас есть JSON, который является источником для Dojo ItemFileReadStore, который хранит базу данных Dojo DataGrid с именем bdayGrid и имеет два атрибута в строке:« name "и„день рождения“Скажем, дни рождения хранятся в формате гггг-мм-дд (т.е. 1998-03-14):.Как добавить фильтр диапазона/запрос в Dojo ItemFileReadStore

{ 
    "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, который будет эффективно фильтровать t шляпа диапазон дат? Кажется, что легко фильтровать с помощью одного значения; Вы закодировать что-то вроде:

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

Но как пройти в высокой/пара низкого значения, которые будут использоваться для фильтрации даты в диапазоне? Вам нужно закодировать пользовательский Dojo DataStore QueryEngine? Если да, то как это будет выглядеть?

ответ

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)); 
    })) 
    }); 
} 
Смежные вопросы