2014-01-21 57 views
3

我創建了一些代碼來保存和恢復列順序,如果能夠保存正確的數據,它也可以調整大小。看起來,當「columnReorder」事件觸發時,新的列順序還沒有實際保存 - 所以儘管列保存和恢復功能確實起作用,但它還是落後了一步。有沒有人知道如何獲得「新」欄信息,或在之後捕獲事件重新排序?這是一條什麼神奇的部分...Kendo Grid:在columnReorder事件中保存狀態

var colCook = getCookieColumns(); 

    //setup user columns or cookie columns as appropriate 
    $("#disputesGrid").kendoGrid({ 
     dataSource: myDataSource, 
     columns: (colCook != null) ? JSON.parse(colCook) : {default column values}, 
     pageable: { 
      refresh: true, 
      pageSizes: [10, 25, 50, 100], 
      buttonCount: 10, 
      input: true 
     }, 
     reorderable: true, 
     columnReorder: function (e) { saveColumnsCookie(); }, 
     sortable: true, 
     resizable: true, 
     selectable: "multiple row" 
    }); 
} 

function getCookieColumns() { 
    var cookiesArray = document.cookie.split(';'); 
    for (var i = 0; i < cookiesArray.length; i++) { 
     var c = cookiesArray[i].trim(); 
     if (c.indexOf("DisputeGridViewColumns=") == 0) return c.substring(23, c.length); 
    } 
    return null; 
} 

function saveColumnsCookie() { 
    //saves the current column information into a cookie 
    try { 
     var d = new Date(); 
     d.setTime(d.getTime() + (365 * 24 * 60 * 60 * 1000)); 
     var expires = "expires=" + d.toGMTString(); 
     document.cookie = "DisputeGridViewColumns=" + kendo.stringify($("#disputesGrid").data("kendoGrid").columns) + "; " + expires; 
    } catch (x) { 
     //it fails when the grid isn't initialized - we can just ignore that 
    } 
} 

注意:新列的順序似乎並沒有在活動結束的「E」,但是這是合理的地方,對不對?

+1

我有同樣的問題。他們需要添加一個在訂單更改後觸發的columnReordered事件。但接受的答案很好。 –

回答

9

您可以檢查e.column(已移動的列),e.newIndex(它將在重新排序後)和e.oldIndex(它來自哪裏)以在重新排序後導出該訂單。 做你想要什麼,最簡單的方法是使用setTimeout

columnReorder: function(e) { 
    var that = this; 
    setTimeout(function() { 
     console.log(kendo.stringify(that.columns)); 
    }, 5); 
} 

demo

+0

非常感謝。我最終發現了事件數據,但我不想使用索引自己做交換。等待幾秒鐘,寫出它是一個更好的主意。它何時被保存並不重要,只是它不會中斷用戶並保存正確的事情。再次感謝! – Jasmine

+0

超時的想法真的很棒,適合我。 –