modern getcmp ext forms extjs filter extjs4 request

forms - getcmp - Formulario ExtJS enviado dos veces



extjs calendar (1)

Tengo un formulario con campos de búsqueda (filtrado) como este:

xtype: ''form'', id: ''searchPanel'', title: ''Search'', collapsible: true, bodyPadding: 10, height: 210, buttonAlign: ''left'', defaults: { width: 400, labelWidth: 120, allowBlank: true, enableKeyEvents: true }, layout: { type: ''table'', columns: 2 }, items: [ { xtype: ''textfield'', name: ''txtFltrSiteName'', fieldLabel: ''Site name or alias'', id: ''txtFltrSiteName'' }, { xtype: ''textfield'', name: ''txtMonthTraffic'', fieldLabel: ''Month traffic'', id: ''txtMonthTraffic'', style: ''margin-left: 100px;'' }, { xtype: ''combo'', id: ''ddlFltrPM'', name: ''ddlFltrPM'', fieldLabel: ''Project manager'', displayField: ''display_name'', valueField: ''user_id'', editable: false, store: new storeOfUsers({ filters: [{ property: ''user_group_code'', value: ''projectmanager'', exactMatch: true }] }) }, // and many other fields below


Pero cuando hago clic en el botón de search , tengo dos solicitudes posteriores. Uno - con filtro adentro, el segundo es sin.

Mi código para la acción del botón de send :


xtype: ''button'', id: ''btn_srch_set'', text: ''Searh'', margin: ''10 7 0 0'', width: '''', handler: function() { var filters = new Array(); var site_name = Ext.getCmp(''txtFltrSiteName'').getValue(); if(site_name.length > 0) filters.push({dataIndex: ''site_name'', type: ''string'', value: site_name}); var project_name = Ext.getCmp(''txtFltrProjectName'').getValue(); if(project_name.length > 0) filters.push({dataIndex: ''project_name'', type: ''string'', value: project_name}); var pm = Ext.getCmp(''ddlFltrPM'').getValue(); if(pm && pm > 0) filters.push({dataIndex: ''project_manager_id'', type: ''int'', value: {''eq'':pm}}); // many other fields listOfSites.filters.removeAll(); if(filters.length > 0) listOfSites.filters.addFilters(filters); listOfSites.store.load(); }



PD
Cuando sobrescribo en el controlador de botón de search funciono esta línea:

filters.push({dataIndex: ''project_manager_id'', type: ''string'', value: pm});

Todo está bien y solo hay una solicitud, por lo que el problema podría estar aquí. Pero estoy atascado y no tengo idea de por qué funciona de esa manera.


Gracias por cualquier ayuda,
Stanislav.

UPD *

var filters = { ftype: ''filters'', // encode and local configuration options defined previously for easier reuse encode: true, // json encode the filter query local: false, filters: [{ type: ''string'', dataIndex: ''site_name'' }, { type: ''date'', dataIndex: ''startdate'' }, { type: ''string'', dataIndex: ''project_name'' // more fields below


Intenta seguir

if(filters.length > 0) listOfSites.filters.addFilters(filters); else listOfSites.store.load();

addFilters() ya puede llamar a sync()