2013-09-19 2 views
0

Я использую datatables ColumnFilterWidget, и я бы хотел, чтобы виджет не сортировал значения, указанные в поле выбора. Я попытался «bSort»: ложный вариант из ColumnFilterWidget, но это Безразлично `, кажется, влияет на сортировку элементов окна выбора:Datatable ColumnFilterWidget отключить параметры фильтра сортировка

$('#mytable').dataTable(
    { 
     "bServerSide": true, 
     "sAjaxSource": "/ajaxAction.htm", 
     "bProcessing": true, 
     "sDom": 'W<"clear">lrtip', 
     "bPaginate": true, 
     "bLengthChange": false, 
     "iDisplayLength": 20, 
     "sPaginationType": "full_numbers", 
     "bInfo": false, 
     "oColumnFilterWidgets": { 
      "bSort": false,      
     } 
)}; 

Я просмотрел код ColumnFilterWidget.js и кажется, что он сортирует значения выберите поле с функцией «fnSort»:

/* (Inside fnDraw function) */ 
... 
// Build the menu 
widget.$Select.empty().append($('<option></option>').attr('value', '').text(widget.oColumn.sTitle)); 
if (widget.bSort) { 
    if (widget.hasOwnProperty('fnSort')) { 
     aDistinctOptions.sort(widget.fnSort); 
    } else { 
     aDistinctOptions.sort(); 
    } 
} 
... 

Но где я могу переопределить или определить эту функцию, так что не сортирует элементы в окне настроек фильтра?

ответ

0

Параметр bSort установлен в положение «истина» по умолчанию в

var ColumnFilterWidget = function($Container, oDataTableSettings, i, widgets) { 
    ... 
} 

Ваша установка "bsort": false не оценивается, следовательно, игнорируется. Чтобы сделать это применяется, вам необходимо изменить вышеупомянутую функцию и добавить:

if ('bSort' in oDataTableSettings.oInit.oColumnFilterWidgets) { 
    widget.bSort = oDataTableSettings.oInit.oColumnFilterWidgets.bSort; 
} 

сразу после

if ('oColumnFilterWidgets' in oDataTableSettings.oInit) { 

Последняя функция будет выглядеть следующим образом:

var ColumnFilterWidget = function($Container, oDataTableSettings, i, widgets) { 
    var widget = this, sTargetList; 
    widget.iColumn = i; 
    widget.oColumn = oDataTableSettings.aoColumns[i]; 
    widget.$Container = $Container; 
    widget.oDataTable = oDataTableSettings.oInstance; 
    widget.asFilters = []; 
    widget.sSeparator = ''; 
    widget.bSort = true; 
    widget.iMaxSelections = -1; 
    if ('oColumnFilterWidgets' in oDataTableSettings.oInit) { 
     if ('bSort' in oDataTableSettings.oInit.oColumnFilterWidgets) { 
      widget.bSort = oDataTableSettings.oInit.oColumnFilterWidgets.bSort; 
     } 
     if ('sSeparator' in oDataTableSettings.oInit.oColumnFilterWidgets) { 
      widget.sSeparator = oDataTableSettings.oInit.oColumnFilterWidgets.sSeparator; 
     } 
     if ('iMaxSelections' in oDataTableSettings.oInit.oColumnFilterWidgets) { 
      widget.iMaxSelections = oDataTableSettings.oInit.oColumnFilterWidgets.iMaxSelections; 
     } 
     if ('aoColumnDefs' in oDataTableSettings.oInit.oColumnFilterWidgets) { 
      $.each(oDataTableSettings.oInit.oColumnFilterWidgets.aoColumnDefs, function(iIndex, oColumnDef) { 
       var sTargetList = '|' + oColumnDef.aiTargets.join('|') + '|'; 
       if (sTargetList.indexOf('|' + i + '|') >= 0) { 
        $.each(oColumnDef, function(sDef, oDef) { 
         widget[sDef] = oDef; 
        }); 
       } 
      }); 
     } 
    } 
    widget.$Select = $('<select></select>').change(function() { 
     var sSelected = widget.$Select.val(), sText, $TermLink, $SelectedOption; 
     if ('' === sSelected) { 
      // The blank option is a default, not a filter, and is re-selected after filtering 
      return; 
     } 
     sText = $('<div>' + sSelected + '</div>').text(); 
     $TermLink = $('<a class="filter-term" href="#"></a>') 
      .addClass('filter-term-' + sText.toLowerCase().replace(/\W/g, '')) 
      .text(sText) 
      .click(function() { 
       // Remove from current filters array 
       widget.asFilters = $.grep(widget.asFilters, function(sFilter) { 
        return sFilter != sSelected; 
       }); 
       $TermLink.remove(); 
       if (widgets.$TermContainer && 0 === widgets.$TermContainer.find('.filter-term').length) { 
        widgets.$TermContainer.hide(); 
       } 
       // Add it back to the select 
       widget.$Select.append($('<option></option>').attr('value', sSelected).text(sText)); 
       if (widget.iMaxSelections > 0 && widget.iMaxSelections > widget.asFilters.length) { 
        widget.$Select.attr('disabled', false); 
       } 
       widget.fnFilter(); 
       return false; 
      }); 
     widget.asFilters.push(sSelected); 
     if (widgets.$TermContainer) { 
      widgets.$TermContainer.show(); 
      widgets.$TermContainer.prepend($TermLink); 
     } else { 
      widget.$Select.after($TermLink); 
     } 
     $SelectedOption = widget.$Select.children('option:selected'); 
     widget.$Select.val(''); 
     $SelectedOption.remove(); 
     if (widget.iMaxSelections > 0 && widget.iMaxSelections <= widget.asFilters.length) { 
      widget.$Select.attr('disabled', true); 
     } 
     widget.fnFilter(); 
    }); 
    widget.$Container.append(widget.$Select); 
    widget.fnDraw(); 
}; 
Смежные вопросы