2010-03-02 50 views
2

我遇到了使用YUI的DataTable列選擇功能的問題。我試過,YUI列選擇

myEndColDataTable.subscribe("theadCellClickEvent", myEndColDataTable.onEventSelectColumn);

myEndColDataTable.subscribe("cellClickEvent", function (oArgs) { this.selectColumn(this.getColumn(oArgs.target));
});

的問題是,我有一個初步的列中選擇程序。我可以突出顯示另一列,但它不會從最初選擇的列中刪除選擇。

回答

0

我想我可以做到這一點,但它不優雅。一定有更好的方法。

myEndColDataTable.subscribe("cellClickEvent", function (oArgs) { 
    var colUnSelect = myEndColDataTable.getSelectedColumns(); 
    myEndColDataTable.unselectColumn(colUnSelect[0]); 
    myEndColDataTable.selectColumn(myEndColDataTable.getColumn(oArgs.target)); 
}); 
1

你是對的 - 沒有快速清潔的解決方案。

YUI DataTable目前(截至2.8)沒有unselectAllColmns方法匹配unselectAllRows(這是由onEventSelectRow調用)。

還值得注意的是,onEventSelectColumn選擇列標題,所以unselectAllCells將無法​​正常工作。

你可以實現自己的unselectAllColumns()功能是這樣的:

function unselectAllColumns (dataTable) { 
     var i, oColumn, oColumnSet = dataTable.getColumnSet(); 
     for (i=0; i<oColumnSet.keys.length; i++) { 
       oColumn = oColumnSet.keys[i]; 
       if (oColumn.selected) { 
         dataTable.unselectColumn(oColumn); 
       } 
     } 
} 

這將是稍微比使用getSelectedColumns()更有效率,因爲你不會需要建立只選定列的中間陣列(查看源getSelectedColumns調用getColumnSet並像上面一樣走過數組)。

+0

我查看了行選擇示例,並在上一步中使其工作。我已經嘗試了這些方法,而且它們都能工作,除了當我選擇一個新列時他們不會取消選擇先前選擇的列。我嘗試了你在第一個例子中的輕微變化,但它不起作用。下一步,我現在試圖獲取所選列的列索引並將其放入一個div,類似於document.getElementById('lastColumn').innerHTML=myEndColDataTable.getSelectedColumns();,但它返回一個數組。 – ctrygstad 2010-03-03 19:19:54

+0

你是對的 - 在查看源代碼時,與選擇行相比,selectColumn()代碼只實現了一半。我重寫了答案。 – 2010-03-05 06:34:42