2012-09-27 61 views
5

我有一個帶內聯過濾的slickgrid(使用DataView)。我爲每一行數據分配了唯一的ID,並且將這個ID(不是行號)傳遞給一個函數,該函數在UI上的其他位置更新div。SlickGrid過濾後的行ID更改

這工作正常,如果我不過濾。但是如果我在傳遞ID之前過濾列,它會更改ID以反映第#行。它甚至會將字符串ID更改爲行號。

這似乎很奇怪。任何想法發生了什麼?

grid_msc.onClick.subscribe(function(e, args) { 
    var cell = grid_msc.getCellFromEvent(e); 
    var row = cell.row;    // get row # 
    var row_ID = data_msc[row].id; // get the row ID, not row # 
    var msc = data_msc[args.row][grid_msc.getColumns()[args.cell].field]; 

    alert("Row#:"+row+", RowID:"+row_ID+", Value:"+msc); 
    mscToUI(msc, row_ID); 
}); 


// Add the selected item to the UI 
    function mscToUI(addC, cellNum) { 
     alert(addC+", "+cellNum); 
     $('#selectedMsc').append('<a href="javascript:removemsc('+cellNum+')" id="'+cellNum+'" class="rSel"><img src="images/remove.png" align="texttop" border="0" style="padding-right:4px;">'+addC+'<br /></a>'); 
    } 
}) 
+0

真的......沒有人知道這件事?看起來像這樣常見的事情是如此顯而易見的錯誤! – user1415445

回答

14

如果您已經使用數據視圖,那麼你應該從dataView_msc)越來越行/數據,而不是原始數據源(data_msc)。

grid_msc.onClick.subscribe(function(e, args) { 
    var cell = grid_msc.getCellFromEvent(e); // get the cell 
    var row = cell.row; // get the row's index (this value will change on filter/sort) 
    var item = dataView_msc.getItem(row); // get the row's item (see: object, data) 
    var msc = item[grid_msc.getColumns()[cell.cell].field]; // get the value of the cell 

    alert("Row Index:"+row+", RowID:"+item.id+", Cell Value:"+msc); 
    console.log(item); 
    mscToUI(msc, item.id); 
}); 

我不太清楚你打算用單擊的單元格的值及其行的id屬性的值內mscToUI()做什麼。我想這可能是更明智的簡單行的整個數據對象(item)傳遞給函數,並使用數據視圖的查詢方法瓶坯任何其他操作:

  • getIdxById(id) - 利用該項目的ID,發現在相對行索引在grid`
  • getItem(i) - 隨着過濾電網的行索引,返回的數據/項目說行
  • getItemById(id) - 利用該項目的ID,返回的數據/項目說項目
  • getItemByIdx(i) - 使用未經過濾的網格的行索引,返回所述行的數據/項目
+0

我認爲這個答覆應該被接受!順便說一句,謝謝你的答案幫了很多! – makim