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中的元素。從現在開始你要添加一個新表,你必須「重新分配」數據錶行爲...