Angularjs 如何从角度控制器对剑道网格调用refresh()?

Angularjs 如何从角度控制器对剑道网格调用refresh()?,angularjs,kendo-ui,kendo-grid,Angularjs,Kendo Ui,Kendo Grid,我正试图遵循一些关于刷新剑道网格的建议,例如 重要的是,在html中,我有: <div kendo-grid="vm.webapiGrid" options="vm.mainGridOptions"> 注意:我使用的是ControllerAs语法,所以我使用的是“vm”而不是$scope 我的问题是“vm.webapiGrid”没有定义。这看起来很简单,但我不确定为什么它没有定义。将id添加到网格并尝试使用它刷新 <div kendo-grid="vm.webapiGrid"

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

重要的是,在html中,我有:

<div kendo-grid="vm.webapiGrid" options="vm.mainGridOptions">
注意:我使用的是ControllerAs语法,所以我使用的是“vm”而不是$scope


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

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

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

在控制器中,请使用以下命令:


$(“#grid1”).data('kendoGrid').refresh()

找到了答案。我读到的另一种刷新数据源的方法是执行以下操作:

vm.mainGridOptions.datasource.transport.read();
这对我不起作用,因为“read”没有定义。查看我的数据源定义,我看到了原因,read需要一个参数(在本例中为“e”):

为了解决这个问题,我在我的作用域中保存了“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);
}

问题已解决(我希望如此)。

这是因为您正在使用options对象触发读取,所以应该使用网格引用:

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

希望这能有所帮助。

这开始让我达到目的(尽管我可能会因为使用jquery选择器而被切掉手指)。问题是刷新函数需要一个事件。如果我进行计算,我会看到:函数(e){var that=this,length,…..这个asnwer也会帮助它尝起来更像JQuery。在角度应用程序中使用JQuery是一种不好的做法。因此,与其使用#grid1,不如使用“scope”或“this”
if (vm.optionCallback !== undefined) {
   vm.mainGridOptions.dataSource.transport.read(vm.optionCallback);
}
<div kendo-grid="vm.webapiGrid" options="vm.mainGridOptions">
$scope.vm.webapiGrid.dataSource.transport.read();