2

不确定我是否正确执行此操作。但是我将剑道网格与对象的数组数据绑定在一起,其中每个对象都有一个布尔属性(即真或假)。

对于用户,我将其显示为复选框,选中状态显示true状态,反之亦然。如果您检查第 1 页中的内容;转到第 3 页;检查几行;返回第 1 页,复选框的状态默认为加载时的状态。

这是我使用的代码片段。

$(function () {
    var ds = new kendo.data.DataSource({
        transport: {
            read: {
                url: '/echo/json/',
                type: 'POST',
                data: {
                    json: JSON.stringify(students)                    
                }
            }
        },
        pageSize: 5
    });

    var kgrid = $("#grid").kendoGrid({
        columns: [

        {
            field: 'name',
            title: 'Name'
        }, {
            field: 'age',
            title: 'Age'
        }, {
            field: 'place',
            title: 'Place'
        }, {
            field: 'hasCar',
            title: 'Owns Car',
            template: function (data) {
                return '<input type="checkbox" ' + (data.hasCar ? 'checked' : '') + '/>';
            }
        }],
        height: 240,
        pageable: true
    });

    $('#btnload').click(function () {
        var grid = kgrid.data('kendoGrid');
        grid.setDataSource(ds);
        $('#grid-display').show();
    });

    $('#btnrefresh').click(function(){
       ds.read(); 
       console.log('refresh'); 
    });

    $('#btnlist').click(function(){
        var res = $('#result');
        kgrid.find('tr td:last input:checked').each(function(i, e){
           var name = $(e).closest('tr').children().first().text();
           res.append('<p>' + name + '</p>'); 
           console.log('execute');           
        });
    });
});

如何在分页上保持状态?

Ps:使用小提琴:http: //jsfiddle.net/deostroll/2SGyV/3/

4

2 回答 2

3

那是因为您所做的更改仅保留在网格中 - 而不是kendoDataSource. 这里MVVM没有完成。因此,您必须在dataSource每次单击时更改适当的值checkbox

当您在 中选择另一个页面时kendoGrid,它会从 中获取数据dataSource,然后将其显示在网格中。除非和 untillthat dataSource发生更改,否则您无法在网格中看到所做的更改。

PS:如果有任何字段IddataSource我会自己更新jsfiddle

更新

检查这个更新的jsfiddle

我已经更新了复选框的模板

template: function (data) {
    return '<input type="checkbox" ' + (data.hasCar ? 'checked' : '') + ' data-name="'+ data.name + '"' +'/>';
}

现在复选框将拥有name数据。您可以使用 更改它id。在更改事件中,dataSource在每个复选框单击时相应地更新您的。

$('#grid-display input').live('change', function(){
    alert($(this).attr('data-name'));
    //update the data source here based on the data-name attribute u're getting
});
于 2013-09-03T09:38:01.170 回答
0

在剑道网格中使用数据绑定事件。

不确定以下代码是否适合您。但是类似的代码对我有用

function OnDataBoundEventMethod(e) {
    var view = this.dataSource.view();
    for (var i = 0; i < view.length; i++) {
        if ([view[i].hasCar]) {
            this.tbody.find("tr[data-uid='" + view[i].uid + "']")
                .addClass("k-state-selected")
                .find(".row-check-box")
                .attr("checked", "checked");
        }
    }
}
于 2016-06-21T05:07:36.400 回答