Значок сортировки не меняется при обработке на стороне сервера Datatable

Когда я использую обработку на стороне сервера в datatable, сортировка работает, но значок сортировки не меняется и остается в том же направлении. Ниже приведен фрагмент кода моей конфигурации с данными.

$('#dtSearchResult').DataTable({
                    "filter": false,
                    "pagingType": "simple_numbers",
                    "orderClasses": false,
                    "order": [[0, "asc"]],
                    "info": true,
                    "scrollY": "450px",
                    "scrollCollapse": true,
                    "bLengthChange": false,
                    "searching": true,
                    "bStateSave": false,
                    "bProcessing": true,
                    "bServerSide": true,
                    "sAjaxSource": VMCreateExtraction.AppSecurity.websiteNode() + "/api/Collection/SearchCustIndividual",
                    "fnServerData": function (sSource, aoData, fnCallback) {
                        aoData.push({ "name": "ccUid", "value": ccUid });
                       //Below i am getting the echo that i will be sending to Server side
                        var echo = null;
                        for (var i = 0; i < aoData.length; i++) {
                            switch (aoData[i].name) {
                                case 'sEcho':
                                    echo = aoData[i].value;
                                    break;
                                default:
                                    break;
                            }
                        }
                        $.ajax({
                            "dataType": 'json',
                            "contentType": "application/json; charset=utf-8",
                            "type": "GET",
                            "url": sSource,
                            "data": aoData,
                            success: function (msg, a, b) {
                                $.unblockUI();

                                var mappedCusNames = $.map(msg.Table, function (Item) {
                                    return new searchGridListObj(Item);
                                });
                                var data = {
                                    "draw": echo,
                                    "recordsTotal": msg.Table2[0].TOTAL_NUMBER_OF_RECORDS,
                                    "recordsFiltered": msg.Table1[0].FILTERED_RECORDS,
                                    "data": mappedCusNames
                                };
                                fnCallback(data);
                                $("#dtSearchResult").show();
                                ko.cleanNode($('#dtSearchResult')[0]);
                                ko.applyBindings(VMCreateExtraction, $('#dtSearchResult')[0]);
                            }
                        })
                    },
                    "aoColumns": [{
                        "mDataProp": "C_UID"
                    }, {
                        "mDataProp": "C_LAST_NAME"
                    }, {
                        "mDataProp": "C_FIRST_NAME"
                    }, {
                        "mDataProp": "C_USER_ID"
                    }, {
                        "mDataProp": "C_EMAIL"
                    }, {
                        "mDataProp": "C_COMPANY"
                    }],
                    "aoColumnDefs": [{ "defaultContent": "", "targets": "_all" },
                //I create a link in 1 st column
                    ]
                });

Здесь есть некоторая конфигурация, которую мне не хватает. Я читал на форумах с данными, и единственная проблема, отмеченная людьми, заключалась в том, что рисование должно быть таким же, как то, что мы отправляем на стороне сервера.


person Aashish Kumar    schedule 12.05.2016    source источник
comment
Вы видите, возвращает ли серверный код правильные данные? Возможно, вам придется посмотреть на успех: функция (msg, a, b) кода.   -  person Tianyun Ling    schedule 12.05.2016
comment
msg — это jsonResult, возвращаемый из БД, и это правильно. Я создаю данные для fnCallback, используя эту строку выше var data = { "draw": echo, "recordsTotal": msg.Table2[0].TOTAL_NUMBER_OF_RECORDS, "recordsFiltered": msg.Table1[0].FILTERED_RECORDS, "data": mappedCusNames };   -  person Aashish Kumar    schedule 12.05.2016
comment
Так ли это?datatables.net/forums/discussion/25552/   -  person Tianyun Ling    schedule 12.05.2016
comment
Было ли это сделано ... уже исправлено в коде ... но безрезультатно.   -  person Aashish Kumar    schedule 12.05.2016


Ответы (1)


Для тех, кто ищет ответ на этот вопрос. Грустно, но мне пришлось написать свою собственную функцию, как показано ниже:

function sortIconHandler(thArray, sortCol, sortDir) {
        for (i = 0; i < thArray.length; i++) {
            if (thArray[i].classList.contains('sorting_asc')) {
                thArray[i].classList.remove('sorting_asc');
                thArray[i].classList.add("sorting");
            }
            else if (thArray[i].classList.contains('sorting_desc')) {
                thArray[i].classList.remove('sorting_desc');
                thArray[i].classList.add("sorting");
            }
            if (i == sortCol) {
                if (sortDir == 'asc') {
                    thArray[i].classList.remove('sorting');
                    thArray[i].classList.add("sorting_asc");
                }
                else {
                    thArray[i].classList.remove('sorting');
                    thArray[i].classList.add("sorting_desc");
                }
            }
        }
    }

tharrray-> Массив всех заголовков строк (для этого можно просто написать селектор jquery).

sortCol->Столбец, по которому нажимается сортировка (параметр Datatable iSortCol_0)

sortDir -> Направление сортировки (параметр Datatable sSortDir_0)

person Aashish Kumar    schedule 06.09.2016