2013-01-21 37 views
0

我有一個我正在使用的數據網格控件,共使用4個表格來生成固定列標題,列標題,固定單元格和單元格(左上角,右上角,左下角,右下角與底部垂直滾動和正確的滾動水平)。一些表格(在本例中爲固定單元[垂直]和非固定列標題[水平])之間的對齊必須與滾動表格同步,並且標題寬度從表格中的隱藏標題計算數據。即使對於非常大的(100k +行)數據集,除非最初加載,否則這種方法非常有效。該表是動態生成的(通過AJAX回調),我正在尋找一種方法,最好在JQuery中調用一個自定義的render()函數,該函數在表創建並最初由瀏覽器呈現後調整頭的大小(只需插入isn這足夠了,它必須在瀏覽器處理完所有的文本度量/邊界/填充/邊距計算後開始渲染表格,以便從中拉出適當的寬度)。是否有一個JQuery事件會在動態生成表格時被調用?

TL; DR:需要一個事件或者一些破解,這個事件或者一些破解將允許我在爲通過DOM或JQuery調用動態創建的表格呈現表格內容之後調用函數(最好不要像setTimeout調用)。

+2

不存在is'nt。有一些突變事件可以使用,但它們在所有瀏覽器中都不受支持。正確的做法是在插入表格時創建自定義事件。 – adeneo

+0

目前,我在填充表格的函數結尾處調用渲染函數,但這不起作用。 (表格已經創建好了,頁面已經被加載了,並且已經超過了$(document).ready()點。 – CoryG

回答

0

只好通過創建的setTimeout調用的函數反覆檢查者如下面的改變來解決這個(一些代碼排除沒有直接關係):

function Datagrid() { 
    var _this = this; setTimeout(function() { _this.CheckAutoColumns(); }, 20); 
} 
function Datagrid_CheckAutoColumns() { 
    if (this != null) { 
     var render = false; 
     for (var i = 0; i < this.Columns.length; i++) { 
      if (this.Columns[i].__LastWidth != this.Columns[i].Container.width()) { 
       render = true; 
       break; 
      } 
     } 
     if (render == true) { this.Render(); } 
     if (this.Disposing === false) { var _this = this; setTimeout(function() { _this.CheckAutoColumns(); }, 20); } 
    } 
} 
Datagrid.prototype.constructor = Datagrid; 
Datagrid.prototype.CheckAutoColumns = Datagrid_CheckAutoColumns; 
相關問題