En ExtJS 6.2, obtengo datos de una base de datos como esta: myStore.load({id: myId); .
¿Cómo paso el ID durante la sincronización? Esto no funciona: myStore.sync({id: myId);
Estoy usando un proxy REST y mi URL tiene este formato: mydomain/users/1
Simplemente puede usar myStore.sync() , no necesita especificar id . La función de sync examinará el contenido de la tienda y agregará/eliminará/actualizará registros según sea necesario.
Al usar REST, puede configurar writeRecordId de Ext.data.write.Writer (ver aquí ) en false , ya que con REST id generalmente se agrega a la URL, como en su caso.
Lo resolví extendiendo Ext.data.proxy.Rest y anulando el método buildUrl para poder extraer la ID de los parámetros de solicitud. Luego usé este proxy anulado en mi modelo:
Ext.define('MYPROJ.proxy.Settings', { extend : 'Ext.data.proxy.Rest', alias : 'proxy.settings', buildUrl(request) { const url = this.callParent([request]); const id = request.getParams().id; if (id) { delete request.getParams().id; const proxyUrl = request.getProxy().getUrl(); return url.replace(proxyUrl, `${proxyUrl}/${id}`); } return url; } }); Ext.define('MYPROJ.model.Setting', { extend : 'Ext.data.Model', alias : 'model.setting', clientIdProperty: 'clientId', fields: [{ name : 'id', type : 'int', persist : false }, { name : 'name', type : 'string', unique : true }], proxy: { type : 'settings', // <- Use overridden proxy here url : `/something/settings` } }); Luego, en mi código puedo usar sync() así:
const myID = 10; this.settingsStore.load({id: myID}); //... this.settingsStore.sync({params: {id: myID}}); Cuando se llama a sync() , myID se extraerá de los parámetros en MYPROJ.proxy.Settings y se agregará a la URL (/algo/configuración/10).