如何从 Angular 控制器调用剑道网格上的 refresh()?

Posted

技术标签:

【中文标题】如何从 Angular 控制器调用剑道网格上的 refresh()?【英文标题】:How to call refresh() on a kendo-grid from an Angular controller? 【发布时间】:2015-04-04 04:23:59 【问题描述】:

我正在尝试遵循一些关于刷新剑道网格的建议,例如 this。

关键是在我的html中:

<div kendo-grid="vm.webapiGrid" options="vm.mainGridOptions">

然后在我的控制器中:

vm.webapiGrid.refresh();

注意:我使用的是 ControllerAs 语法,所以我使用的是“vm”而不是 $scope。

我的问题是“vm.webapiGrid”未定义。这看起来很简单,但我不确定为什么它是未定义的。

【问题讨论】:

【参考方案1】:

找到了答案。我读到的另一种刷新数据源的方法是:

vm.mainGridOptions.datasource.transport.read();

这对我不起作用,因为“读取”未定义。查看我的数据源定义,我看到了原因,读取需要一个参数(在本例中为“e”):

    vm.mainGridOptions = 
        dataSource: 
            transport: 
                read: function (e) 
                    task.getAllTasks(vm.appContext.current.contextSetting).
                        then(function (data) 
                            e.success(data);
                        );
                ,
            
        ,

为了解决,我将“e”保存在我的作用域中,然后在我想刷新时重用它:

    vm.mainGridOptions = 
        dataSource: 
            transport: 
                read: function (e) 
                    task.getAllTasks(vm.appContext.current.contextSetting).
                        then(function (data) 
                            e.success(data);
                            vm.optionCallback = e;
                        );
                ,
            
        ,

然后:

if (vm.optionCallback !== undefined) 
   vm.mainGridOptions.dataSource.transport.read(vm.optionCallback);

问题解决了(我希望)。

【讨论】:

【参考方案2】:

这是因为您使用选项对象来触发读取,您应该使用网格引用来代替:

<div kendo-grid="vm.webapiGrid" options="vm.mainGridOptions">

如:

$scope.vm.webapiGrid.dataSource.transport.read();

希望有帮助。

【讨论】:

【参考方案3】:

将 id 添加到网格并尝试使用它进行刷新。

<div kendo-grid="vm.webapiGrid" options="vm.mainGridOptions" id="grid1">

在控制器中使用这个:

$("#grid1").data('kendoGrid').refresh();

【讨论】:

这开始让我到达那里(尽管我可能会因为使用 jquery 选择器而被砍断手指)。问题是刷新功能正在等待一个事件。如果我评估,我会看到:function (e) var that = this, length,..... ***.com/questions/18399805/… 这个asnwer也会有所帮助 这尝起来更像 JQuery。在 Angular 应用程序中使用 JQuery 是一种不好的做法。所以,而不是#grid1 它应该是“范围”或“这个”

以上是关于如何从 Angular 控制器调用剑道网格上的 refresh()?的主要内容,如果未能解决你的问题,请参考以下文章

Angular 6 中的剑道网格:isEditing:如何?

如何使用命令行安装剑道网格

在 Angular 2 中为多个动态剑道网格导出 excel

如何自动更新剑道网格?

剑道网格未在弹出窗口中显示

剑道网格:性能缓慢问题