剑道网格中的数据在排序时消失

时间:2016-01-20 18:37:30

标签: javascript angularjs kendo-grid

在角度应用程序中,我有一个页面,根据从http请求中检索到的数据显示多个Kendo-grid。数据以json的形式返回。

这是在成功的数据检索上执行的功能。这是在一个控制器内,而ctrl是"这个"控制器范围上的对象。 Moment是一个用于管理日期的JavaScript库。它在这里做的唯一事情就是将字符串格式化为日期(MM / DD / YYYY)和时间(hh:mm A)。

function (data) {
    ctrl.dateGroups = {};
    var currentDate = '';
    data.Data.forEach(function (item) {
        item.Date = item.StartDateTime ? moment(item.StartDateTime).format(HC_APP_CONFIG.dateFormat) : '';
        item.ClockInTime = item.StartDateTime ? moment(item.StartDateTime).format(HC_APP_CONFIG.timeFormat) : '';
        if ( angular.isEmpty(item.EndDateTime) ||
            item.EndDateTime === '' ||
            item.EndDateTime.format(HC_APP_CONFIG.dateFormat).match(HC_APP_CONFIG.badLocalDatePattern) !== null ){
            item.ClockOutTime = '';
            item.EndDateTime = '';
        } else {
            item.ClockOutTime = moment(item.EndDateTime).format(HC_APP_CONFIG.timeFormat);
        }
        var currentDate = 'd'+item.Date;
        if (ctrl.dateGroups.hasOwnProperty(currentDate) &&
            ctrl.dateGroups[currentDate].length > 0) {
            ctrl.dateGroups[currentDate].push(item);
        } else {
            ctrl.dateGroups[currentDate] = [item];
        }
    });
}

函数(成功)获取每个返回的项目并将其作为日期命名的数组的一部分放入对象中,以便例如1月14日的所有项目最终在一个数组中,另一个项目在1月15日结束,等

这将显示在带有此循环的页面中:

<div class="col-sm-12" ng-repeat="(key,value) in punchList.dateGroups">
    <h2 class="punch-heading">{{key.substring(1)}}</h2>
    <div hc-grid id="grid-{{key}}"></div>
</div>

结果是一系列网格,每个网格对应一个日期并包含该日期的所有项目。这再次成功。

网格配置:

gridConfig = {
    uiOptions: {},
    autoBind: false,
    sortable: {
        mode: 'single'
    },
    height: 'auto',
    columnMenu: false,
    filterable: false,
    dataSource: {
        type: 'json',
        serverPaging: true,
        serverFiltering: true,
        serverSorting: true,
        pageSize: HC_APP_CONFIG.defaultPageSize,
        schema: {
            data: 'Data',
            total: 'TotalCount',
            model: {
                id: 'ShiftId',
                fields: {
                    EmployeeName: {
                        type: 'string'
                    },
                    EmployeeCode: {
                        type: 'string'
                    },
                    JobName: {
                        type: 'string'
                    },
                    ClockIn: {
                        type: 'string'
                    },
                    ClockOut: {
                        type: 'string'
                    }
                }
            }
        }
    },
    columns: [
        {
            field: 'EmployeeName',
            title: 'Name',
            sortable: false
        },
        {
            field: 'EmployeeCode',
            title: 'Employee Code',
            sortable: false
        },
        {
            field: 'JobName',
            title: 'Job',
            sortable: false
        },
        {
            field: 'ClockInTime',
            title: 'Clock In'
        },
        {
            field: 'ClockOutTime',
            title: 'Clock Out'
        }
    ]
}

问题是我按Clock In或Clock Out列排序(唯一的可排序列)。此时,网格结构(分页指示符,列标题等)保持完好,但数据消失。

我正在使用Kendo UI v2015.1.429

1 个答案:

答案 0 :(得分:1)

Kendo UI网格通过内置的AJAX系统支持直接服务器交互,以进行API调用。设置serverSort:true似乎可以告诉Kendo UI网格删除当前数据模型并向服务器查询新排序的数据(它希望服务器提供)。由于您没有使用与网格的直接服务器交互,它可能会丢弃模型,但无法获得新模型。

有一个sortable:true选项可能是客户端对现有数据进行排序所需的选项。

Link to Kendo UI grid server-side sorting article