Angularjs 如何从角度控制器对剑道网格调用refresh()?
我正试图遵循一些关于刷新剑道网格的建议,例如 重要的是,在html中,我有: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"
<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();