Javascript-форум (https://javascript.ru/forum/)
-   ExtJS (https://javascript.ru/forum/extjs/)
-   -   Есть Ext.grid.Panel. Как в store передать параметр? (https://javascript.ru/forum/extjs/26959-est-ext-grid-panel-kak-v-store-peredat-parametr.html)

tigeralhimik 29.03.2012 11:07

Есть Ext.grid.Panel. Как в store передать параметр?
 
Доброе утро!
Есть Ext.grid.Panel. Как в store передать в качестве параметра дату из календаря dateMenu с формы?

вот код:
var gridDisloc = Ext.define('gridDisloc',
  {
  extend: 'Ext.grid.Panel',
  alias: 'widget.tablegrid',

  requires:['*'],

  initComponent: function() {
      var pointer = this;

      var fileWindow = new FileForm;

      var selectedToEdit = null;

      var editAction = Ext.create('Ext.Action',
        {
        icon: 'resources/themes/images/default/dd/drop-add.gif', // Use a URL in the icon config
        text: 'Редактировать запись',
        handler: function(widget, event) {
            selectedToEdit = pointer.getSelectionModel().getSelection()[0];
            var editWindow = new EditForm (selectedToEdit);
            editWindow.display();

          }
        }
      );

      var dateMenu = Ext.create('Ext.menu.DatePicker',
        {
        handler: function(dp, date) {
            storedislocdt.load();
          }
        }
      );

      var contextMenu = Ext.create('Ext.menu.Menu',
        {
        items:[editAction]
        }
      );

      var filterFrom = Ext.create('Ext.form.field.Date',
        {
        xtype: 'datefield',
        id: 'From',
        name: 'From'
        }
      );

      var d = new Date();
      var day = d.getDate();
      var month = d.getMonth() + 1;
      var year = d.getFullYear();

      filterFrom = year + "-" + month + "-" + day;

      Ext.apply(this,
        {
        columnLines: true,
        editable: true,
        store: storedislocdt,
        title: 'Дислокации',
        viewConfig: {
          stripeRows: true,
          listeners: {
            itemcontextmenu: function(view, rec, node, index, e) {
                e.stopEvent();
                contextMenu.showAt(e.getXY());
                return false;
              }
            }
          },
        columns:[
            {
            text: '#',
            flex: 1,
            sortable: true,
            dataIndex: 'id',
            width: 4
            },
            {
            text: '№ Вагона',
            flex: 1,
            sortable: true,
            dataIndex: 'Vagon'
            },
            {
            text: 'Вагоновладелец',
            flex: 1,
            sortable: true,
            dataIndex: 'IDOwner'
            }
          ],
        height: 900,

        region: 'center',
        layout: 'fit',
        tbar:[
            {
            text: 'Выберите дату',
            iconCls: 'calendar',
            menu: dateMenu
            },
            {
            text: 'Выборка',
            tooltip: 'Выборка',
            iconCls: 'add',
            handler: function() {
                searchBYDATE();
                pointer.hide();
              }
            }, filterFrom

          ]
        }
      );
      this.callParent();

      function searchBYDATE() {
        Ext.Ajax.request(
          {
          waitMsg: 'Пожалуйста, подождите',
          url: 'names.php',
          params: {
            task: 'LISTINGDISLOCDT',
            DT: dateMenu.getValue()
            },
          success: function(response) {
              var result = eval(response.responseText);
              switch (result) {
                case 1:
                  Ext.MessageBox.alert('Успех', 'Запись добавлена');
                  //storestations.load();
                  pointer.hide();

                  break;
                case 2:
                  Ext.MessageBox.alert('Успех', 'Запись обновлена');
                  //storestations.load();
                  pointer.hide();

                  break;
                default:
                  Ext.MessageBox.alert('Упс', 'Возникла ошибка'+result);

              }
            },
          failure: function (response) {
              var result = response.responseText;
              Ext.MessageBox.alert('Упс', 'Ошибка подключения к базе');
            }
          }
        )
      };


    },
  onSync: function() {
      this.storedislocdt.sync();
    }



  }
);

Ex_Soft 29.03.2012 12:39

Цитата:

Сообщение от tigeralhimik (Сообщение 165509)
Как в store передать в качестве параметра дату из календаря dateMenu с формы?

storedislocdt.load({ params: { paramName: paramValue} })? (если я Вас правильно понял)

nekto_O 29.03.2012 13:00

Ex_Soft,
еще можно так:
storedislocdt.getProxy().extraParams = { paramName: paramValue };
storedislocdt.load();

Разница здесь есть небольшая.
params как единовременные параметры, а extraParams запоминается в Proxy.

tigeralhimik 29.03.2012 13:11

Попробовал. не передает параметр
обновил следующий код:

var dateMenu = Ext.create('Ext.menu.DatePicker',
        {
        handler: function(dp, date) {
            storedislocdt.load({
                params: {
                     DT: '2012-03-28'
                }
            })
          }
        }
      );


в серверной части в коде переменная DT пустая

серверная часть:
function getListDislocDT() {
    $dat = $_POST['DT'];
	$query = "SELECT * FROM main WHERE DTImport<'".$dat."'";
	$result = mysql_query($query);
	$nbrows = mysql_num_rows($result);

	if($nbrows>0){
		while($rec = mysql_fetch_assoc($result)){
    	    $i++;
			$arr[] = $rec;
		}
		$jsonresult = json_encode($arr);
		echo '{"results":'.$jsonresult.'}'; 
	} else {
		echo '{"results":'.$query.'}';
	}
}

Ex_Soft 29.03.2012 13:27

Цитата:

Сообщение от tigeralhimik (Сообщение 165534)
Попробовал. не передает параметр
...
в серверной части в коде переменная DT пустая

серверная часть:
$dat = $*!*_POST*/!*['DT'];

Я не силен в PHP, но Ctrl+Shift+K || Firebug Вам в руки...

nekto_O 29.03.2012 13:55

tigeralhimik,
var_dump($_POST, $_GET);

или в консоль загляните, не может быть чтоб параметры не передавались...

Ex_Soft 29.03.2012 14:09

Цитата:

Сообщение от nekto_O (Сообщение 165532)
params как единовременные параметры, а extraParams запоминается в Proxy.

Вот и я ж о чем: extraParams, IMHO, лучче юзать для т.н. "условно-постоянных" параметров, а, в случае ТС, дата - оперативный параметр. Ну и... Не забываем, что extraParams можно перекрыть в params...

tigeralhimik 29.03.2012 20:38

Передал параметры через storedislocdt.proxy.extraParams, как и советовали!

Ex_Soft, nekto_O, спасибо за помощь!


Часовой пояс GMT +3, время: 15:46.