Having trouble refreshing Gridx using JsonRest

368 Views Asked by At

When an account is chosen, I would like to show all related contacts in contactGrid. I can do this with XhrGet, but I would like to be using JsonRest.

Here is how I setup the Grid:

function contactTabSetup() {
  var structure = [{ field: 'id', name: 'Id', width: '5em' },
                   { field: 'firstName', name: 'First Name', width: '12%' },
                   { field: 'lastName', name: 'Last Name', width: '12%' },
                   { field: 'email', name: 'Email', width: '12%' },
                   { field: 'description', name: 'Description' },
                   { field: 'mobileNumber', name: 'Mobile Phone', width: '12%' }];

  var contactGrid = new Grid({
    id: 'contactGrid',
    pageSize: 20,
    cacheClass: Cache,
    structure: structure,
    noDataMessage: "No contacts found",
    modules: [SingleSort]}, contactTab);

  contactGrid.startup();
}

Here is how I want to populate the grid:

function contactLoad(acctIds) {
  var grid = registry.byId("contactGrid");
  grid.model.clearCache();
  grid.setStore(JsonRest({target:"//localhost:8080/program/contacts/byAccount/" + acctIds}));
  grid.body.refresh();
}

The correct Json response is being returned (as viewed on console):

{
    "description": "Mike is a cool guy",
    "email": "[email protected]",
    "firstName": "Mike",
    "id": 1503,
    "lastName": "Smith",
    "mobileNumber": "555-555-5555"
}

... but I can't get the grid to show the new data.

Any help would be appreciated! Thank you


I tried many additional ways, without success... This is where I am stuck - not sure what else to try. I make the JsonRest call, get back the Json Object, and print it out to console. Seeing that the json response looks good I try to setStore and this error is thrown: "s.query is not a function in dojo.js" (line 382). Is this a bug, or am I missing something? Thank you.

// s.query is not a function in dojo 10.0.1
grid.model.clearCache();
var store = new JsonRest({target:"//localhost:8080/program/contacts/byAccount"});
store.get(acctIds).then(function(items){
  console.log(items);
  grid.setStore(items);
});
grid.body.refresh();

I found it. Change:

grid.setStore(items);

to

grid.setStore(new ItemFileReadStore({data: {items : result}}));

Does anyone know how to just use JsonRest and not also include ItemFileReadStore? Thank you, Chris

1

There are 1 best solutions below

1
mpasko256 On

My little piece of advice is to try to set store up once and use filter instead.

grid.filter({"acctId":"..."});

The second thing is that store sometimes requires idAttribute definition i.e.

JsonRestStore({target:"...", idAttribute:"id"});