Angularjs ng-click在Kendo Grid中不起作用

时间:2013-12-03 12:50:43

标签: javascript angularjs kendo-ui kendo-grid angularjs-ng-click

使用angularjs和kendo网格我试图在选择网格中的复选框时调用一个函数。但无论我做什么都没有在ng-click中发生,甚至不会抛出错误。我在调用的方法的顶部添加了console.log()但没有显示。我试图在范围内的服务中添加方法,也直接在范围中添加。

基本上我的问题是如何使用ng-click一个kendo网格单元格模板中的复选框?

这是网格绑定代码:

var cols = this.GetGridColumns(uiConfig.GridColumns);

var grid = $("#kGrid").kendoGrid({
dataSource: {
   serverPaging: true,
   serverSorting: true,
   schema: {
         data: "data",
         total: "total",
         model: {
         id: "relatedEntityID"
         }
   },
   pageSize: 10,
   transport: {
   read: function(options) {
          /* read from service */
       }
     }
   },
   columns: cols, 
   scrollable: false,
   pageable: { "refresh": true, "pageSizes": true },
   sortable: true,
   filterable: true,
   selectable: "multiple",
   change: () => this.onChange()
});

这是

的定义
GetGridColumns(columns: Array<servicePath.SLF.solutionEngine.Model.Admin.GridColumn>): any
    {
        var colHeader = new Array();

        colHeader.push({
            template: '<input type="checkbox" id="cbItem" class="checkbox" ng-click="genericServices.selectRow(\'kGrid\', $event)" />',

            headerTemplate: '<input type="checkbox" id="check-all" ng-click="genericServices.ToggleCheckAllInGrid(\'#kGrid\', $event)" />',
            width: '30px'});

        var column = new servicePath.SLF.solutionEngine.Model.CMs.GridColumnCM();

        for (var j=0 ; j < columns.length; j++)
        {
            column = new servicePath.SLF.solutionEngine.Model.CMs.GridColumnCM();

            column.Field = columns[j].BindingName;
            column.Title = columns[j].BindingName;
            column.ColumnType = columns[j].GridColumnType;
            column.HorizontalAlignment = columns[j].HorizontalAlignment;
            column.LocalizedName = columns[j].LocalizedLabel;

            colHeader.push({ title: column.Name, field: columns[j].BindingName, template: column.Template } );
        }

        return colHeader;
    }

在上面的代码中,头文件模板中的genericServices.ToggleCheckAllInGrid工作正常。

这是genericServices的定义。

this.selectRow = function (gridId: string, e: any): void {
            gridId = '#' + gridId;
            console.log(gridId);

            var elem = angular.element(e.currentTarget);
            var row = elem.closest("tr");
            var checked = elem.prop('checked');

            if (checked) {
                //-select the row
                row.addClass("k-state-selected");
            } else {
                //-remove selection
                row.removeClass("k-state-selected");
            }
        };

3 个答案:

答案 0 :(得分:1)

我想在添加到网格中的行(到DOM)之前运行了角度引导程序。

如果是这样,你必须手动调用angular bootstrap。

答案 1 :(得分:1)

您可以使用以下代码处理kendo网格标题上的onclick事件:

$('body ').on('click','.grid .k-header',function(e){

 //write your logic..
});

在剑道网格中,您无法使用ng-click或onClick事件。只有href才有效。

答案 2 :(得分:0)

如果您使用指令来响应点击该怎么办? http://docs.angularjs.org/guide/directive ng-click非常像jQuery。