/**
* @author Ed Spencer
* @class Ext.data.proxy.Memory
* @extends Ext.data.proxy.Client
*
* <p>In-memory proxy. This proxy simply uses a local variable for data storage/retrieval, so its contents are lost on
* every page refresh.</p>
*
* <p>Usually this Proxy isn't used directly, serving instead as a helper to a {@link Ext.data.Store Store} where a
* reader is required to load data. For example, say we have a Store for a User model and have some inline data we want
* to load, but this data isn't in quite the right format: we can use a MemoryProxy with a JsonReader to read it into
* our Store:</p>
*
<pre><code>
//this is the model we will be using in the store
Ext.define('User', {
extend: 'Ext.data.Model',
fields: [
{name: 'id', type: 'int'},
{name: 'name', type: 'string'},
{name: 'phone', type: 'string', mapping: 'phoneNumber'}
]
});
//this data does not line up to our model fields - the phone field is called phoneNumber
var data = {
users: [
{
id: 1,
name: 'Ed Spencer',
phoneNumber: '555 1234'
},
{
id: 2,
name: 'Abe Elias',
phoneNumber: '666 1234'
}
]
};
//note how we set the 'root' in the reader to match the data structure above
var store = new Ext.data.Store({
autoLoad: true,
model: 'User',
data : data,
proxy: {
type: 'memory',
reader: {
type: 'json',
root: 'users'
}
}
});
</code></pre>
*/
Ext.define('Ext.data.proxy.Memory', {
extend: 'Ext.data.proxy.Client',
alias: 'proxy.memory',
alternateClassName: 'Ext.data.MemoryProxy',
/**
* @cfg {Array} data Optional array of Records to load into the Proxy
*/
constructor: function(config) {
this.callParent([config]);
//ensures that the reader has been instantiated properly
this.setReader(this.reader);
},
/**
* Reads data from the configured {@link #data} object. Uses the Proxy's {@link #reader}, if present
* @param {Ext.data.Operation} operation The read Operation
* @param {Function} callback The callback to call when reading has completed
* @param {Object} scope The scope to call the callback function in
*/
read: function(operation, callback, scope) {
var me = this,
reader = me.getReader(),
result = reader.read(me.data);
Ext.apply(operation, {
resultSet: result
});
operation.setCompleted();
operation.setSuccessful();
Ext.callback(callback, scope || me, [operation]);
},
clear: Ext.emptyFn
});