2015-10-06 3 views
0

Я использую jQuery DataTables и хочу, чтобы фильтр по группам переключался на кнопки.Datatables and Using Filters

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

Например. Пользователь 1 принадлежит группе 1. В таблице по умолчанию отображаются все инструменты Group 1. Но когда они нажимают «Группа 2», я хочу, чтобы таблица обновлялась, чтобы показать все инструменты группы 2.

В настоящее время, это работает с параметрами POST:

def my_search 
    if params[:search][:value].present? 
     records = Tool.full_text_search(params[:search][:value]) 
    elsif params[:group] 
     records = Tool.where(group: params[:group]) 
    else 
     records = Tool.where(group: current_user.group) 
    end 
    end 

Это JQuery, который работает с моей функции рельсов:

var toolTable = $('#tools-table').DataTable({ 
    "ajax": { 
    'url':'/tools.json', 
    'data': { 
     group: function() { 
     return group; 
     } 
    } 
    }, 
    "columns": [ 
    {data: '0'}, 
    {data: '1'}, 
    {data: '2'}, 
    {data: '3'}, 
    {data: '4'}, 
    {data: '5'} 
    ], 
    'columnDefs': [{ 
    'orderable': false, 
    'targets': ['nosort'] 
    }], 
    // autoWidth: false, 
    // pagingType: 'full_numbers', 
    processing: true, 
    serverSide: true, 
    "bPaginate": true, 
    "bLengthChange": false, 
    "bFilter": true, 
    "bInfo": false, 
    "bAutoWidth": false 

}); 

ответ

0

РЕШЕНИЕ

Вы можете использование ajax.data опция t o добавить дополнительный параметр для отправки на сервер, и это будет ваш идентификатор группы.

$('#example').DataTable({ 
    "ajax": { 
     "url": "/test/0", 
     "data": function(d){    
      d.form_group = $('#example-group').val(); 
     } 
    } 
}); 

// Handle filter change event 
$('#example-group').on('change', function(){ 
    // Reload table data from Ajax data source 
    $('#example').DataTable().ajax.reload(); 
}); 

Вы должны обрабатывать этот параметр (form_group в моем примере) на сервере и вернуть соответствующие данные.

DEMO

См this jsFiddle для кода и демонстрации.

+0

Я использую панель инструментов для переключения, например: http://www.bootstrap-switch.org/examples.html...But Я попытался использовать этот пример, и кажется, что моя структура данных doesn 't соответствовать вашим. Будет ли запрос данных каждый раз, когда произойдёт изменение? –

+0

@KevinBrown, yes 'ajax.reload()' заставит DataTables отправить запрос. Помните, что вам нужно использовать событие 'switchChange.bootstrapSwitch' вместо' change' (см. [Events] (http://www.bootstrap-switch.org/events.html)). Также '$ ('# example-group'). Val()' необходимо заменить соответствующим методом для получения значения переключателя. –

+0

Итак, я рядом. Если я вручную установлю «данные»: «group_name», я получаю отфильтрованный ответ. Но когда я устанавливаю функцию, никакие параметры не передаются. Я буду обновлять свой код завтра. –