Я инициализировал GridFilter с фильтром даты следующим образом:
var filtersXXX = new Ext.ux.grid.GridFilters({
filters: [
{type: 'date', dataIndex: 'confirmedDate'}
]
});
filtersXXX.autoReload = false;
this.XXXGrid.plugins=[this.XXXGrid.initPlugin(filtersXXX)];
//Add an event handler when the filter is updated:
this.XXXGrid.on('filterupdate',function(){
alert('filterupdate');
this.XXXTab.populateData.call(this); //populatedata is custom function that sends ajax request
},this);
//Override the buildquery to manipulate the params
filtersXXX.buildQuery = function (filtersXXX) {
var filterparams = Ext.util.JSON.decode(this.store.baseParams.filterParams); // filterParams is defiend inside the store as namevaluepair.This will be sent to server
for(var i=0, len=filtersXXX.length; i<len; i++) {
var gridFilter1 = filtersXXX[i];
var objTemp = {x: gridFilter1.data["value"]};
objTemp[gridFilter1.field] =objTemp["x"];
delete objTemp["x"];
Ext.apply(filterparams,objTemp);
}
return {filterParams:Ext.util.JSON.encode(filterparams)};
}
Когда страница загружается, и я выбираю дату (допустим, до), «filterupdate» срабатывает 3 разаи каждый приводит к вызову populateData.Таким образом, есть 3 запроса AJAX.В последующее время при каждом изменении фильтра, т.е. при выборе другой даты, он срабатывает дважды.
Что я делаю не так?
РЕДАКТИРОВАТЬ: XXXGrid - это GridPanel
РЕДАКТИРОВАТЬ #2. Проблема, по-видимому, заключается в следующем: когда вы выбираете средство выбора даты, оно немедленно запускает событие filterupdatevent.Это приводит к вызову populatedata, т.е. 1 ajax-запросу.После этого он запускает oncheckchange ---> filterupdate -> populatedata ---> ajax-запрос Затем onmenuselect -> filterupdate -> populatedata ---> ajax-запрос
Есть ли способ сделать это: когда срабатывает первая 'filterupdate', проверьте, есть ли там также 'oncheckchange' или 'onmenuselect'.если есть, ничего не делать в первом фильтре