Filtrado remoto con ListFilter en el encabezado de columna de cuadrícula de ExtJS

Estoy usando el complemento ListFilter para filtrar los resultados en un panel de cuadrícula. La definición de la columna es.

{
    header: 'Provider',
    filter: {
        type: 'list',
        store: Ext.getStore('MyApp.store.Provider'),
        dataIndex: 'provider_id',
        labelField: 'name'
    }
}

MyApp.store.Provider se crea como

   Ext.create('Ext.data.Store', {
        storeId: 'MyApp.store.Provider',
        autoDestroy: true,
        autoLoad: {start: 0, limit: 50},
        autoSync: true,
        model: 'MyApp.model.Provider',
        pageSize: 50,
        proxy: {
            type: 'ajax',
            api: {
                create:  'proxy/provider/create',
                read:    'proxy/provider/read',
                update:  'proxy/provider/update',
                destroy: 'proxy/provider/destroy'
            },
            reader: {
                type: 'json',
                root: 'data',
                successProperty: 'success',
                messageProperty: 'message',
                totalProperty: 'total'
            },
            writer: {
                allowSingle: false,
                type: 'json',
                writeAllFields: false,
                root: 'data'
            }
        }
    });

Y por ultimo modeloMyApp.model.Provider Se define como

Ext.define('MyApp.model.Provider', {
    extend: 'Ext.data.Model',
    fields: [
        { name: 'provider_id', type: 'int'},
        'name',
        { name: 'create_time', type: 'date', dateFormat: appDateFormat },
        { name: 'status', type: 'int'}
    ],
    idProperty: 'provider_id',
    displayProperty: 'name' // A custom property used for dynamically use the property to display
})

Ahora este código no muestra ningún submenú en el menú de filtro. Solo se muestra cargando. Ver la imagen

Actualizar

Lo he resuelto utilizando la siguiente configuración de filtro. Esto en realidad llenaoptions config manualmente Entonces nostore se utiliza aquí.

{
  type: 'list',
  labelField: 'name',
  options: (function () {
    var opts = [];
    fS.load(function (records, operation, success) {
      for (var i = 0; i < records.length; i++) {
        var ar = {
          id: records[i].get('provider_id'),
          name: records[i].get('name')
        };

        opts.push(ar);
      }
    });
    return opts;
  })(),
  single: true
}

Parece que 'id' está codificado.id: records[i].get('provider_id'), no se ve bien. Aunque funciona.

Pero sigo buscando una forma adecuada de hacerlo.

Nota: El comportamiento esperado se puede encontrar enExtJS 4.1.1. Mira estojsfiddle. Lo he reproducido. Pero esta misma cosa no funciona enExtJS 4.0.7

Respuestas a la pregunta(1)

Su respuesta a la pregunta