Found a solution (although it is still open to the perception of other ideas).
First, you can call the store load () function with the configuration object that will be passed to the operation. The API documents for Ext.data.Operation make it clear that one of the configuration parameters is for an array of Filter objects, so you can do this:
var idFilter = Ext.create('Ext.util.Filter', { property: 'id', value: '100,200,300' }); myStore.load({ filters: [ idFilter ] });
This results in a query in which the query string contains ?filter=[{"property"%3Aid%2C"value"%3A100,200,300}] (in other words, the URL-encoded version [{ property: 'id', value: '100,200,300'}] ).
You can also just call myStore.filter('id', '100,200,300') without first calling .load() . Assuming you have remoteFilter = true in your store, this will make a request with the same request parameters shown by agove.
Sidenote: You can change the keyword used for 'filter' by setting the filterParam configuration parameter for the proxy. For example, if filterParam = q, then the above sequence of changes changes to ?q=[{"property"%3Aid%2C"value"%3A100,200,300}]
Second , you can control the "structure" of the filter in the query string. In my case, I did not want something like filter = {JSON}, as shown above. I need a query string that looks like this ?id=100,200,300 For this, I needed to expand the proxy server and override the default getParams () function:
Ext.define('myapp.MyRestProxy', { extend: 'Ext.data.proxy.Rest', getParams: function(operation) {