0
votes

I created a model like

Ext.define('MyApp.model.ContainerDetailsModel', {
extend: 'Ext.data.Model',
alias: 'model.ContainerDetailsModel',
config: {
    fields: [
        {
            name: 'id',
            allowNull: false,
            type: 'string'
        },
        {
            name: 'container_types_id',
            type: 'string'
        }
    ]
  }
});

and a store like this

Ext.define('MyApp.store.ContainerDetailsStore', {
extend: 'Ext.data.Store',

requires: [
    'MyApp.model.ContainerDetailsModel'
],

config: {
    model: 'MyApp.model.ContainerDetailsModel',
    storeId: 'ContainerDetailsStore',
    proxy: {
        type: 'ajax',
        enablePagingParams: false,
        url: 'hereIsServiceUrl',
        reader: {
            type: 'json'
        }
    }
}
});

Now somewhere in application I tried to get one record like:

var detailsStore = Ext.getStore("ContainerDetailsStore");
detailsStore.load();
var detailsRecord = detailsStore.last();

But it gaves me undefined. The json returned by service is ok, it use it in different place as source for list. I already tried to change allowNull to true, but there is no null id in source. I tried set types to 'int' with the same result.

So I have tried

console.log(detailsStore);

Result is like this (just important values):

Class {
...
loaded: true,
data: Class {
   ...
   all: Array[1] {
       length: 1,
       0: Class {
           container_types_id: "1",
           id: "726",
           ....
       }
   ...
   }
   ...
},
...
}

In the same place

 console.log(detailsStore.data);

returns (as it should):

 Class {
   ...
   all: Array[1] {
       length: 1,
       0: Class {
           container_types_id: "1",
           id: "726",
           ....
       }
   ...
   }

but (next line)

console.log(detailsStore.data.all);

returns

 []

And it's empty array. When i try any methods from the store it says the store is empty. I wrote console.log() lines one after another - so for sure it doesn't change between them (I try it also in different order or combinations).

My browser is Google Chrome 23.0.1271.97 m I use Sencha from https://extjs.cachefly.net/touch/sencha-touch-2.0.1.1/sencha-touch-all-debug.js

How can I take a record from that store?

1

1 Answers

2
votes

store.load() Loads data into the Store via the configured proxy. This uses the Proxy to make an asynchronous call to whatever storage backend the Proxy uses, automatically adding the retrieved instances into the Store and calling an optional callback if required. The method, however, returns before the datais fetched. Hence the callback function, to execute logic which manipulates the new data in the store. Try,

detailsStore.load({
    callback: function(records, operation, success) {
    var detailsRecord = detailsStore.last();
    },
    scope: this
});