Search code examples
dojox.grid.datagriddojox.griddojo

dojo.data.ItemFileReadStore: Invalid item argument. while reloading data


I am facing a strange problem here. I have a Select box displaying Department field value. Onchange of the department option, I have to populate the grid. When the page loads first time, the onChange event works fine and the data gets loaded perfectly in the grid. When I change the Department in the Select box, I get error in firebug "dojo.data.ItemFileReadStore: Invalid item argument". I checked the JSON returned from server and it is exactly same as the JSON loaded earlier. Here are the code snippet of my code

HTML

<div id="costCenter" data-dojo-type="dijit/form/Select" data-dojo-attach-point="costCenter" data-dojo-attach-event="onChange:loadStacks"></div>

JS

loadStacks: function() {
var requestParams = {};
        requestParams.Action = "getStacks";
        requestParams.callType = "ajaxCall";
        requestParams.deptID = deptID;

        var docData = null;
        request.invokePluginService("MyPlugin", "UtilityService",
                {
                    requestParams: requestParams,
                    requestCompleteCallback: lang.hitch(this, function(response) {  // success

                        docData= response.Data;
                        var dataStore = new dojo.data.ItemFileReadStore({data: docData});
                        grid = dijit.byId("docGrid");

                        grid.attr('structure', docStructure);
                        grid.attr('store', dataStore);
                        grid.render();
                    })
                }
            );
}

JSON data returned:

docData : {"items":[{"docName":"test3","id":135,"order":1},{"docName":"Ashish","id":4085,"order":21},{"docName":"fsdfsadf","id":4088,"order":23}],"identifier":"docName"}

Any idea about it?


Solution

  • Solved it myself. Added below lines before setting new store to the grid.

    if (null != grid.store)
    {
        grid.store.close();
        grid.store.fetch({query: {docName: "*"}});
        grid._refresh();
    }
    

    And set clearOnClose: true while setting new store.