slickgrid格式化程序和虚拟滚动重置表单

时间:2013-06-04 08:07:10

标签: slickgrid formatter

function linkFormatter(row, cell, value, columnDef, dataContext) {
    var cell = "";
    cell += '<input type="checkbox" id="cb' + dataContext['id'] + '" name="cb' + dataContext['id'] + '" value="' + dataContext['id'] + '" ' + (dataContext['Reviewer'] == 'Unassigned' ? 'class="unassignedLoan"' : "") + '> ';
    cell += '<a href="LoanEdit.aspx?loanid=' + dataContext['id'] + '">' + value + '</a>';
    return cell;
};

我的格式化程序函数为dataView。当用户将该行滚出视图并单击其他单元格时,格式化程序创建的checkbox将被重置。我认为虚拟滚动是使用格式化程序重新呈现该单元格,因此它会丢失checkbox的值。有没有人建议解决这个问题?

由于

1 个答案:

答案 0 :(得分:0)

在滚动或排序时,会再次创建网格DOM。因此初始值会重置。 您必须在数组中保存值(例如,选中复选框的id)并在滚动和排序事件上再次设置它。

这样做......

grid.onScroll.subscribe(function(e) {
            grid.invalidate();
            grid.render();

            var $canvas = $(grid.getCanvasNode()), $allRows = $canvas
                    .find('.slick-row');

            $($allRows).each(function() {
                if(this row's checkbox is in selectedRowId){
                                       set checkbox property to checked;
                                     }
            });

        });
grid.onSort.subscribe(function(e) {
            grid.invalidate();
            grid.render();

            var $canvas = $(grid.getCanvasNode()), $allRows = $canvas
                    .find('.slick-row');

            $($allRows).each(function() {
                if(this row's checkbox is in selectedRowId){
                                       set checkbox property to checked;
                                     }
            });

        });