2015-10-06 90 views
0

我正在使用jQuery DataTables,并希望按切换按钮进行过滤。数据表和使用过滤器

目前,我的表格显示属于当前用户的工具,但我希望他们也能够搜索其他组的工具。

例如。用户1属于组1.表格默认显示所有组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

SOLUTION

你可以使用ajax.data选项t o添加要发送到服务器的附加参数,这将是您的组ID。

$('#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...但我试过使用这个例子,它看起来像我的数据结构doesn不符合你的。每次有变更时,数据表请求是否会发生? –

+0

@KevinBrown,是的'ajax.reload()'将强制DataTables发送请求。请记住,您必须使用'switchChange.bootstrapSwitch'事件而不是'change'(请参阅[events](http://www.bootstrap-switch.org/events.html))。还需要用适当的方法替换'$('#example-group')。val()'来检索开关的值。 –

+0

所以,我很接近。如果我手动设置''data“:”group_name“',我会得到一个过滤的响应。但是当我设置该函数时,没有传递参数。明天我会更新我的代码。 –