2014-07-24 43 views

回答

2

它通过修改slick.grid.js的setupColumnReorder功能使用jQuery的排序为列排序,所以你可以挂钩到事件

我已经加入我自己的事件处理程序: onColumnsReorderStart onBeforeColumnsReordered

function setupColumnReorder() { 
    $headers.filter(":ui-sortable").sortable("destroy"); 
    $headers.sortable({ 
    containment: "parent", 
    distance: 3, 
    axis: "x", 
    cursor: "default", 
    tolerance: "intersection", 
    helper: "clone", 
    placeholder: "slick-sortable-placeholder ui-state-default slick-header-column", 
    start: function (e, ui) { 
     ui.placeholder.width(ui.helper.outerWidth() - headerColumnWidthDiff); 
     $(ui.helper).addClass("slick-header-column-active"); 
     trigger(self.onColumnsReorderStart, ui);//added HERE 
    }, 
    beforeStop: function (e, ui) { 
     $(ui.helper).removeClass("slick-header-column-active"); 
     trigger(self.onBeforeColumnsReordered, ui);//added HERE 
    }, 
    stop: function (e) { 
     if (!getEditorLock().commitCurrentEdit()) { 
     $(this).sortable("cancel"); 
     return; 
     } 

     var reorderedIds = $headers.sortable("toArray"); 
     var reorderedColumns = []; 
     for (var i = 0; i < reorderedIds.length; i++) { 
     reorderedColumns.push(columns[getColumnIndex(reorderedIds[i].replace(uid, ""))]); 
     } 
     setColumns(reorderedColumns); 

     trigger(self.onColumnsReordered, {}); 
     e.stopPropagation(); 
     setupColumnResize(); 
    } 
    }); 
} 

,并在同一个文件,你需要注册的事件:

// Public API 

$.extend(this, { 
    "slickGridVersion": "2.1", 

    // Events 
    "onScroll": new Slick.Event(), 
    "onSort": new Slick.Event(), 
    "onHeaderMouseEnter": new Slick.Event(), 
    "onHeaderMouseLeave": new Slick.Event(), 
    "onHeaderContextMenu": new Slick.Event(), 
    "onHeaderClick": new Slick.Event(), 
    "onHeaderCellRendered": new Slick.Event(), 
    "onBeforeHeaderCellDestroy": new Slick.Event(), 
    "onHeaderRowCellRendered": new Slick.Event(), 
    "onBeforeHeaderRowCellDestroy": new Slick.Event(), 
    "onMouseEnter": new Slick.Event(), 
    "onMouseLeave": new Slick.Event(), 
    "onClick": new Slick.Event(), 
    "onDblClick": new Slick.Event(), 
    "onContextMenu": new Slick.Event(), 
    "onKeyDown": new Slick.Event(), 
    "onAddNewRow": new Slick.Event(), 
    "onValidationError": new Slick.Event(), 

    "onViewportChanged": new Slick.Event(), 
    "onColumnsReorderStart": new Slick.Event(),//added HERE 
    "onColumnsReordered": new Slick.Event(), 
    "onBeforeColumnsReordered": new Slick.Event(),//added HERE 
    "onColumnsResized": new Slick.Event(), 
    "onCellChange": new Slick.Event(), 
    "onBeforeEditCell": new Slick.Event(), 
    "onBeforeCellEditorDestroy": new Slick.Event(), 
    "onBeforeDestroy": new Slick.Event(), 
    "onActiveCellChanged": new Slick.Event(), 
    "onActiveCellPositionChanged": new Slick.Event(), 
    "onDragInit": new Slick.Event(), 
    "onDragStart": new Slick.Event(), 
    "onDrag": new Slick.Event(), 
    "onDragEnd": new Slick.Event(), 
    "onSelectedRowsChanged": new Slick.Event(), 
    "onCellCssStylesChanged": new Slick.Event(), 

...

使用它则是这样的:

grid.onColumnsReordered.subscribe(function (s, e) { 
     console.log('onColumnsReordered'); 
     var myItem = e.item; 
    }); 
    grid.onColumnsReorderStart.subscribe(function (s, e) { 
     console.log('onColumnsReorderStart'); 
     var myItem2 = e.item; 
    }); 

    grid.onBeforeColumnsReordered.subscribe(function (s, e) { 
     console.log('onBeforeColumnsReordered'); 
    }); 
+0

它炒菜很好,有什么办法,以示与箭头一起被拖动的价值?我认为影子元素或其他东西可以附加到拖动箭头,并在拖动结束后将其删除,但不知道如何去做。 – Mutant

+0

此外,当试图将列拖动到外部时,它会在表格框架中水平移动(即使我能够访问单击的元素并在表格视图外的拖动停止处检索它)。 – Mutant

+1

可以移除您需要的移动约束在slick.grid.js中从可排序的初始化中删除“containment”和“axis”选项。至于第一条评论,我不明白你想显示什么值(来自标题的文本?); –