Пользовательская сортировка данных Dojo на стороне сервера - PullRequest
0 голосов
/ 24 января 2010

Я использую dojo.data.ItemFileWriteStore, чтобы нарисовать сетку данных dojo (которая работает нормально), и сетка показывает правильно. Я использовал сортировку на стороне клиента, и это тоже работало нормально. но теперь мне нужно изменить сортировку и сделать это на стороне сервера. Для этого я пытаюсь использовать событие onHeaderCellClick, с помощью которого я могу запустить функцию JavaScript. что-то вроде

 gridInfo = {
            store: myJsonStore,
            structure: myStructure
            onHeaderCellClick:getSortedTable
         };

Теперь вот функция getSortedTable, которую я хочу использовать для повторного вызова сервера - передачи имени ячейки, имени таблицы и порядка сортировки (asc или desc).

 function getSortedTable(e)
    {
  var cellName = e.cell.name;
            var tableName = ?
            var sortOrder = ?
          // getSortedTablefromServer(cellName, sortOrder, tablename)
    }

но единственное, что я могу получить из параметра 'e', ​​это имя ячейки и может быть именем таблицы.

  1. Как узнать или отслеживать погоду, будет ли это возрастающий порядок, требуемый пользователем, или это нисходящий порядок.
  2. Также - как мне показать маленькую стрелку в заголовке столбца, чтобы показать пользователю, что данные находятся в порядке убывания или убывания?

Любая помощь высоко ценится!

Спасибо

Ответы [ 2 ]

0 голосов
/ 29 апреля 2016

Я думаю, вы можете изменить свой магазин. Вместо этого я использую сетку с 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
0 голосов
/ 27 января 2010

Скорее всего, вам лучше изменить хранилище данных, чтобы обрабатывать сортировку на стороне сервера, а не сетку (например, добавить критерии сортировки в качестве параметра запроса к вызову XHR, инициированному fetch(), вместо сортировки набора результатов). сторона клиента). Сетка должна вести себя точно так же, как при сортировке на стороне клиента, поскольку она будет просто отражать порядок сортировки хранилища данных.

От dojo.data.api.Read относительно fetch():

If a sort parameter is specified, this is a indication to the datastore to 
sort the items in some manner before returning the items.  The array is an array of 
javascript objects that must conform to the following format to be applied to the
fetching of items:
    {
        attribute: attribute || attribute-name-string,
        descending: true|false;   // Optional.  Default is false.
    }
Note that when comparing attributes, if an item contains no value for the attribute
(undefined), then it the default ascending sort logic should push it to the bottom 
of the list.  In the descending order case, it such items should appear at the top of the list.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...