如何使用 kendo ui 分组,使用 angular,正确地使用行模板?

How do you get kendo ui grouping, with angular, working properly with row templates?

当您使用 Kendo UI 网格分组并使用行模板时,您会丢失一列并且它们与 header 行错位。我找到了几个解决方案,但它们都是基于使用 jquery 而不是 AngularJs.

类似的问题,但它使用的是 jQuery 与 Angular。 kendo Grid grouping incompatibility with row template

我也有同样的错误:http://www.kendoui.com/forums/ui/grid/grid-grouping-problem-when-using-row-template-bug.aspx#1948937

区别在于我没有使用 jQuery,我使用的是 Angular。

我在 html 中定义了一个 kendo ui 网格,如下所示:

HTML

<div kendo-grid="vm.myTaskListGrid" k-options="vm.gridOptions"></div>

<script id="tmpl-myTask-list-row" type="text/x-kendo-tmpl">
    <tr>
        <td><a href="\#/details/#:id#">#:projectName#</a></td>
        <td>#:name#</td>
        <td>#:statusName#</td>
        <td>#:parentTaskName#</td>
        <td>
            #:plannedCompletedDate#
            #:estimatedCompletedDate#
        </td>
        <td>
            <button type="button" class="btn btn-blue btn-sm" data-ng-click="vm.edit(#:id#)"><i class="fa fa-edit" /></button>
        </td>
    </tr>
</script>

我的控制器是这样设置的..

Angular 控制器:

vm.gridOptions = {
            dataSource: {
                transport: {
                    read: getMyTaskList
                },
                group: { field: "projectName" },
                pageSize: 25,
                sort: {
                    field: 'firstname',
                    dir: 'asc'
                }
            },
            sortable: true,
            pageable: true,
            groupable: true,
            rowTemplate: kendo.template($('#tmpl-myTask-list-row').html()),
            columns: [
            {
                title: 'Project Name',
                field: 'projectName',
            },
            {
                title: 'Name',
                field: 'name'
            },
            {
                title: 'Status',
                field: 'statusName'
            },
            {
                title: 'Dependent Task',
                field: 'parentTaskName'
            },
            {
                title: 'Dates'
            },
            {
                title: ''
            }]
        };

        function getMyTaskList(options) {
            myTaskService.getMyTaskList(2, vm.showDone).then(function (response) {
                options.success(response);
            });
        };

Angular 服务:

根据要求添加此内容,并注意当我不尝试使用 #-- 行模板和 $.proxy 行修复此问题时网格工作正常。

function getMyTaskList(userId, showDone) {
            return $http.get("/api/tasks/getMyTaskList?userId=" + userId + "&showDone=" + showDone);
        }

我试过添加建议的

在我加的腰带上:

        #= new Array(this.group().length + 1).join('<td class="k-group-cell"></td>') #

但我读到你必须添加 $.proxy

$.proxy(kendo.template($('#tmpl-myTask-list-row').html()), getMyTaskList),

但控制器上的 $.proxy 似乎不起作用。如果我有 #= new Array... 代码到行模板并且不包含 $.proxy 我得到错误

TypeError: undefined is not a function

如何使 kendo ui 分组与 angular 一起正确使用行模板?

正如我所说,你需要

  1. 首先通过 new kendo.data.DataSource、
  2. 创建数据源
  3. 将其设置为 gridOptions 上的道具和
  4. 将其绑定到模板而不是 getMyTaskList

JS:

var dataSource = new kendo.data.DataSource({
    transport: {
        read: getMyTaskList
    },
    group: {
        field: "projectName"
    },
    pageSize: 25,
    sort: {
        field: 'firstname',
        dir: 'asc'
    }
});
var t = $.proxy(kendo.template($('#tmpl-myTask-list-row').html()), dataSource);   

vm.gridOptions = {
    dataSource: dataSource,
    sortable: true,
    pageable: true,
    groupable: true,
    rowTemplate: t,
    columns: [{
        title: 'Project Name',
        field: 'projectName',
    }, {
        title: 'Name',
        field: 'name'
    }, {
        title: 'Status',
        field: 'statusName'
    }]
};