2014-08-28 67 views
-1

我在這裏創建了一個簡單的網格,我想在本地過濾網格時重新計算列的總和。我不想計算列或模板,因爲我想更新標籤,而且我必須在網頁在本地過濾時在頁面中執行一些其他操作。如何在Kendo網格中的客戶端過濾網格時獲取事件處理函數?

var data = [ 
    { item: "item1", weight: 15 }, 
    { item: "item2", weight: 22 }, 
    { item: "item3", weight: 43 }, 
    { item: "item4", weight: 37 }, 
    { item: "item5", weight: 33 } 
]; 
$("#grid").kendoGrid({ 
    columns: [ 
     { field: "item" }, 
     { field: "weight" } 
    ], 
    filterable: true,      
    sortable: true, 
    pageable: true, 
    resizable:true, 
    selectable: "row", 
    columnMenu: true, 
    dataSource:data , 
    change: function(e) { 
     var grid = e.sender; 
     var selected = grid.dataItem(this.select()); 
     alert(selected.item); 
     getSum(); 
    } 
}); 
getSum(); 
function getSum() { 
    var grid = $("#grid").data("kendoGrid"); 
    var data = grid.dataSource.data(); 
    var sum = 0; 
    for (var i = 0; i<= (data.length-1);i++) 
    { 
     sum = sum + data[i].weight;  
    } 
    $("#weight-label").text(sum); 
} 

http://jsfiddle.net/KendoDev/gb3qzgm2/

如何獲得事件處理程序時,網格客戶端進行過濾?

+0

你嘗試過'dataBinding'或'dataBound'事件掛鉤嗎? – Brett 2014-08-28 17:55:18

回答

1

在計算總和的函數中,應該使用grid.dataSource.view()而不是grid.dataSource.data()

你的jsfiddle修改此處http://jsfiddle.net/OnaBai/gb3qzgm2/1/

根據劍道UI文件:data()

返回獲取數據源的數據項。

view()

返回對應於當前頁面的數據項,篩選,排序和組配置

然後,如果你想自動更新標籤,你可能從網格中調用getSumdataBound事件處理程序與您的JSFiddle的此其他版本一樣:http://jsfiddle.net/OnaBai/gb3qzgm2/2/

+0

OnaBai,過濾器現在不工作,出了什麼問題?我很困惑。 – Dev 2014-08-28 19:44:57

+0

你是什麼意思,它不工作?你試圖設置哪種過濾條件?試試這個:http://jsfiddle.net/OnaBai/gb3qzgm2/5/ – OnaBai 2014-08-28 21:40:32

+0

是的,有些時候我忘記了數據源中的模型定義。現在它可以工作,謝謝! – Dev 2014-08-29 05:05:13

1

我只是做了一個微小的改動你的代碼,這些變化適應的方式劍道任務時,它產生之前,我們可以注入自己的自定義JavaScript「修訂劍道/生成」 JavaScript字符串:

http://jsfiddle.net/gb3qzgm2/4/

var data = [{ 
    item: "item1", 
    weight: 15 
}, { 
    item: "item2", 
    weight: 22 
}, { 
    item: "item3", 
    weight: 43 
}, { 
    item: "item4", 
    weight: 37 
}, { 
    item: "item5", 
    weight: 33 
}]; 
$("#grid").kendoGrid({ 
    columns: [{ 
     field: "item" 
    }, { 
     field: "weight" 
    }], 
    filterable: true, 
    sortable: true, 
    pageable: true, 
    resizable: true, 
    selectable: "row", 
    columnMenu: true, 
    dataSource: data, 
    change: function (e) { 
     var grid = e.sender; 
     var selected = grid.dataItem(this.select()); 
     alert(selected.item); 
     var s = getSum(); 

     $("#weight-label, .k-pager-info").text('The Sum is: ' + s); 
    } 
}); 
//getSum(); 

function getSum() { 
    var grid = $("#grid").data("kendoGrid"); 
    var data = grid.dataSource.data(); 
    var sum = 0; 
    for (var i = 0; i <= (data.length - 1); i++) { 
     sum = sum + data[i].weight 
    } 
    return sum 
} 
+0

這不會是答案,因爲它不會在這裏工作,http://jsfiddle.net/KendoDev/gb3qzgm2/6/ – Dev 2014-08-29 05:08:08

+0

你是對的,在那個小提琴中,我做的修改只是運行/修復你的代碼用戶點擊一個網格元素,這不是你的問題,你正在尋找鉤住過濾器生命週期,而@OnaBai提供'grid.dataSource.view()'作爲解決方案是正確的。 – 2014-08-29 17:33:22

相關問題