YUI列选择

时间:2010-03-02 18:57:50

标签: yui yui-datatable

我在使用YUI的DataTable列选择功能时遇到问题。我试过了,

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

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

问题是,我有一个以编程方式选择的初始列。我可以突出显示另一列,但它不会从最初选择的列中删除选择。

2 个答案:

答案 0 :(得分: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并像上面那样遍历数组)。

答案 1 :(得分:0)

我想我可以做到这一点,但它并不优雅。必须有更好的方法。

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