Ext.regModel("Sencha.Protocol.Model", { // JCM not actually used... fields: [ {name: "id"} ] }); Ext.data.SyncStorageProxy = Ext.extend(Ext.data.Proxy, { constructor: function(config) { // Ext.data.utilities.check('SyncStorageProxy', 'constructor', 'config', config, ['id','url','key']); // Ext.data.SyncStorageProxy.superclass.constructor.call(this, config); // // Local Storage Proxy // config.database_name= config.id; config.datastore_name= 'data'; config.localStorageProxy= config.localStorageProxy || Ext.data.ProxyMgr.create({ type: 'localstorage', id: config.database_name }); config.store= config.store || new Ext.data.SyncStore(config); // // Remote Storage Proxy // config.remoteStorageProxy = config.remoteStorageProxy || Ext.data.ProxyMgr.create({ type: 'scripttag', url: config.url, model: 'Sencha.Protocol.Model' // JCM This is just to keep the underlying code quiet. Could use an anonymous model? }); // // Sync Storage Proxy (combines local and remote proxies) // this.proxy= new Ext.data.SyncProxy(config); Ext.data.utilities.delegate(this,this.proxy,['create','read','update','destroy','setModel']); // // Sync Protocol // this.protocol= new Ext.data.Protocol(config); }, sync: function(callback,scope) { this.protocol.sync(this.proxy,callback,scope); } }); Ext.data.ProxyMgr.registerType('syncstorage', Ext.data.SyncStorageProxy);