Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to call refresh() on a kendo-grid from an Angular controller?

I'm attempting to follow several suggestions on refreshing a kendo-grid such as this.

The essential is that in the html I have:

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

Then in the controller I have:

vm.webapiGrid.refresh();

Note: I'm using the ControllerAs syntax so I am using "vm" rather than $scope.

My problem is that "vm.webapiGrid" is undefined. This seems so straightforward, but I'm not sure why it is undefined.

like image 430
Michael Witt Avatar asked Feb 04 '15 15:02

Michael Witt


People also ask

What is Pageable in kendo grid?

kendo:grid-pageable-messagesThe text messages displayed in pager. Use this option to customize or localize the pager messages.

What is Dataitem in kendo grid?

Returns the data item to which the specified table row is bound. The data item is a Kendo UI Model instance.


1 Answers

Found the answer. One other method of refreshing the datasource I read about was to do something like:

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

This wasn't working for me as "read" was undefined. Looking at my datasource definition, I saw the reason, read needs a parameter (in this case "e"):

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

To solve, I saved "e" in my scope and then reused it when I wanted to refresh:

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

and then:

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

Problem solved (I hope).

like image 110
Michael Witt Avatar answered Sep 22 '22 11:09

Michael Witt