0

我目前正在开发一个项目,在其中实施多个报告。报表过滤器被远程提交给我的操作,并且返回结果通过搜索,排序和分页显示在Datatable中。在.js.erb文件中渲染具有Jquery数据表的模板

我有由具有这样的代码drg.js.erb文件:

var html = "<%= escape_javascript(render(partial: 'drg_datatable',formats: [:html],locals: {result: @result})) %>"; 
$("#datatable-result").append(html); 

局部_drg_datatable.html.erb由具有数据表这样实现。下面是我的_drg_datatable.html.erb文件:

<% if result %> 
    <table id="results" class="table table-striped table-bordered display"> 
    <% case params[:view] %> 
    <% when "ahfs" %> 
     <%= datatable_ahfs_result(result) %> 
    <% when "drg_code" %> 
     <%= datatable_drg_result(result) %> 
    <% when "inpharmics_id" %> 
     <%= datatable_inpharmics_id_result(result) %> 
    <% when "provider" %> 
     <%= datatable_provider_result(result) %> 
    <% else %> 

    <% end %> 
    </table> 
<% end %> 

我面临的问题是,当我使用.js.erb文件呈现局部_drg_datatable.html.erb它创建的表,但逃脱的JavaScript添加排序,分页和我们在Jquery Datatables中获得的其他很酷的功能。有人可以指点我该怎么做?我试图在不写escape_javascript的情况下渲染partial .js.erb,但部分渲染完全不会渲染。

回答

1

@grotori:你的解决方案给了我一个修复它的提示。我使用名称在应用程序中未使用的名称重命名了我的数据表id。我删除了部分数据表的初始实现,并修改了部分代码,并将数据表应用到它。这是我做的:

var html = "<%= escape_javascript(render(partial: 'drg_datatable',formats: [:html],locals: {result: @result})) %>"; 
$("#datatable-result").html(html); 

jQuery(function() { 
    $("#drg-results").dataTable({ 
     "sDom": "<'row-fluid'<'span4'l><'span7 pull-right'f>r>t<'row-fluid'<'span4'i><'span7 pull-right'p>>", 
     "sPaginationType": "bootstrap", 
     "sScrollX": "100%", 
     "bDestroy": true, 
     "bProcessing": true, 
     "bScrollCollapse": true 
    }); 
}); 

希望这可以帮助其他尝试实现相同的事情。

1

您必须在您的drg.js.erb中显式调用数据表js函数以“数据化”您的表。例如:

var html = "<%= escape_javascript(render(partial: 'drg_datatable',formats: [:html],locals: {result: @result})) %>"; 
$("#datatable-result").append(html); 
$('#results').dataTable(); 

我假设你有这样的:

$(document).ready(function(){ 
    $('a selector of yours').dataTable(); 
}); 

在应用程序的JavaScript的地方。这个文件加载后会运行一次,并且适用于存在于你的dom中的元素。从现在开始你要添加一个新表,你必须“重新分配”数据表行为...