2012-07-11 154 views
1

我確實有一個在頁面上運行的代碼。頁面包含3個選項卡,每個選項卡包含一個表格和2個日期輸入字段以及用於發送請求的按鈕。 JS看起來像這樣。重新加載數據表內容

$(document).ready(function(){ 
    var tbl1 = $("tbl1").dataTable(){ //a lots of parametres} 
    .. //2 more tbl2 and tbl3 variable initialization 

    $("btn1").click(function(){ 
     tbl1.fnReloadAjax(tbl.oSettings()); 
    }); 
    ..//2 more btn2 and btn3 action initialization 
}) 

第一次頁面加載時,日期輸入字段有10天的時間,表中包含最近10天的記錄。現在我做了一些更改,我確實有一個新的ajax請求從服務器刪除記錄,我需要更新表格內容。 每行都有一個按鈕,然後按下它可以刪除服務器上的此記錄。一切正常,但看到變化需要重新加載整個頁面。 我曾嘗試這樣做:

function removeData(source){ 
    $.post('delete_record',{}, function ...)// ajax request to remove data 
    alert("deleted"); // notice to user that record was deleted 
    tbl1.fnReloadAjax(tbl1.oSettings()); // ERROR no ref to tbl1(trying to update table content) 
} 

誤差becouse removeData功能REF裏面TBL1對象亙古不變的存在,becouse TBL1被內部定義$(document).ready函數。我怎麼可以得到鏈接tbl1出

我已經試過現在表功能準備()的表初始化代碼。像

var getoTabele = function(){ 
    var oTable = $("tbl1").dataTable..... //initialization code 
    ... 
    ... 
    return oTable; 
} 

現在的東西,我可以使用oTable removeData函數內becouse我可以鏈接removeData功能

var oTable = getoTable() // Data warning. Cannot reinitialise DataTable 

裏面哪個是對becouse功能getoTable創造新oTable不是裁判舊

回答

0

您可以在$(document).ready()之外定義您的tblN變量,然後您將在您的功能中使用它們:

var tbl1, tbl2, tbl3; 
$(document).ready(function(){ 
    // **** // 
    tbl1 = $("tbl1").dataTable(); 
}); 

function removeData() { 
    // **** // 
    tbl1.fnReloadAjax(tbl1.oSettings());  
} 
2

使用bRetrieve PARAM:

function removeData(source){ 
    (...) 

    // this will return the previous, already initialized dataTable object. 
    var tbl1 = $("tbl1").dataTable({'bRetrieve':true}); 

    tbl1.fnReloadAjax(tbl1.oSettings()); 
} 
+0

這是偉大的:)。我自己找到了解決方案,但它很複雜,我使用單例模式,並且檢查是否被初始化。 – simar 2012-07-11 08:29:48

+0

這是好得多,我的解決方案更乾淨整潔。非常感謝,我很抱歉,我確實犯了錯誤,並且強烈要求你幫助不起作用。 – simar 2012-07-11 08:35:03