Я думаю, вы можете изменить свой магазин. Вместо этого я использую сетку с jsonRestStore. Таким образом, сетка запускает запрос каждый раз, когда я изменяю сортировку, щелкая столбец.
Вот моя сетка
require([
"dojox/grid/EnhancedGrid",
"dojox/data/JsonRestStore",
"dojox/grid/enhanced/plugins/NestedSorting",
"dojo/domReady!",
"dojox/grid/cells/dijit"
], function(DataGrid, JsonRestStore) {
dataStore = new JsonRestStore({
target: "/url_to_your_be"
});
grid = new DataGrid({
store: dataStore,
plugins: {"nestedSorting": true},
query: "?something=1",
structure: [
{
defaultCell: { editable: false},
cells: [
{ name: "col 1", field: "col_1", width: "50px"},
{ name: "col 2", field: "col_2", width: "50px"}
]
}
],
selectionMode: "single",
sortFields: [{attribute: 'col_1', descending: false},{attribute: 'col_2', descending: false}]
}, "yourGridId");
grid.startup();
});
sortFields предназначен для установки сортировки при первой загрузке и может игнорироваться, если она вам не нужна.
Каждый раз, когда вы нажимаете в заголовке, он отправляет запрос, как
http//www.yourwebsite.com/url_to_your_be/?something=1&sort(+col_1,+col_2)
Даже если вы меняете запрос
var grid = dijitRegistry.byId('yourGridId');
grid.setQuery("?something=2");
запрос будет
`http//www.yourwebsite.com/url_to_your_be/?something=2&sort(+col_1,+col_2)`
Теперь вы можете разделить данные $ _GET в вашем BE и выполнить сортировку
Мой BE отправляет данные как объект json:
[{"col_1": 1, "col_2": "something"},...]
с заголовком диапазона данных:
Content-Range: items=0-10/100