2012-11-23 3 views
3

У меня есть форма с возможностью поиска (фильтрации) полей, как это:ExtJS формы отослано дважды

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 


Но когда я нажимаю на кнопку search, у меня есть два запроса пост. Один - с фильтром в нем, второй - без.

Мой код 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(); 
} 



P.S.
Когда я перезаписать в search функции кнопки обработчик эту строку:

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

Evrything нормально, и есть только один запрос, поэтому проблема может быть здесь. Но я застрял и понятия не имею, почему так работает.


Спасибо за любую помощь,
Станислав.

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 
+0

Вы можете помечать версию ExtJS пожалуйста? – sra

+0

Версия: ** Ext JS 4 ** – StasGrin

ответ

5

Попробуйте следующие

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

addFilters() уже может назвать sync()

+0

Oh! Спасибо, это работает! :) Но на данный момент .. фильтр пуст (в 'post'-данных нет поля фильтра). – StasGrin

+0

@StasGrin Подождите, что такое 'фильтры'? Я думал, что это магазин? Можете ли вы опубликовать его? – sra

+0

Я говорю о сообщениях, отправленных в мой скрипт, нажав кнопку «Поиск». так что вот мои данные для поля 'filter':' "[{" type ":" numeric "," compare ":" eq "," value ": 2," field ":" project_manager_id "}, {" type ":" string "," value ":" 2 "," field ":" client_id "}]" ' – StasGrin

Смежные вопросы