Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 11.01.2012, 15:16
Новичок на форуме
Отправить личное сообщение для Сергей З Посмотреть профиль Найти все сообщения от Сергей З
 
Регистрация: 02.12.2011
Сообщений: 5

Как сделать реконфигурацию фильтра динамического Grid?
Есть динамический грид, который изначально загружается с пустым columnModel, потом в зависимости от данных в сторе делается переконфигурация с гридом..., аналогично пробую сделать с фильтром для грида, но переконфигурировать фильтр, для грида... пробовал простым присвоение, не работает ((
Пример кода:
var ReaderData= new Ext.data.JsonReader();
          var dataStore = new Ext.data.Store ({
     // ** конфигурация хранилища store
      //** PROXY *************
          url: 'block/modules/Projects_reports/handlers/get_data.php',
          reader: ReaderData, // наш JsonReader
       //writer: Writer,
          listeners: {         
          load : function(obj, records) {
           } // eo load
        , metachange: function(obj, meta) {
          console.info('получили метаданные');

          function SetColModel(meta) {
      // значения по умолчанию
          var defs = {
              filterable: true
            , width: 120
              }
         var cols = [];
         // заполняем массив колонок
         Ext.each(meta.fields, function(fld, idx){

         cols[idx] = {
            // если заголовок не указан, будем использовать имя поля
              header: fld.header ? fld.header : fld.name
             , dataIndex: fld.name
              // если sortable=0, то false, в остальных случаях true 
             , sortable: parseInt(fld.sortable) == 0 ? false : true
             // если ширина не указана, берем из defs
             , width: parseInt(fld.width) ? parseInt(fld.width) : defs.width   
                }
               }); // eo each
//console.log(cols);
               var cm = new Ext.grid.ColumnModel({
               }); // eo cm   

              cm.setConfig(cols); // устанавливаем конфигурацию колонок   
               //console.info(cm);
               return cm; 
             }; 

            // функция построения модели колонок по метаданным
            cm = SetColModel(meta);

            var grid = Ext.getCmp('grid_w');

            var filterCfg = 
               {
             local: 'true',
             filters: []
            };

          // this is the important part
        for (var column in cm.lookup) 
        {
           var i = cm.lookup[column].dataIndex;
           if (i) 
        {
            // map float and int field types to numeric
            var t = grid.store.fields.map[i].type.type;
            if (t === 'int' || t === 'float') t = 'numeric';
            else t = 'string';
            // add filter
            filterCfg.filters.push(
            {
                dataIndex: i,
                type: t
              });
           }
         }
         var filters = new Ext.ux.grid.GridFilters(filterCfg);
         console.log(filters);
             // получить ссылку на grid
            // применить новые колонки к гриду
            grid.reconfigure(this, cm);

            grid.filters = filters;

            } // eo metachange   
          } // eo listener
         }); // eo store

          var def_cm = new Ext.grid.ColumnModel({
               id: 'cm',
        // свойства по умолчанию
            defaults: {
              filterable: false  // отключаем фильтрацию, иначе ругается
             },
           columns: [] // пустой массив !!!
         });
         // define initial filter config
    

       var filters = new Ext.ux.grid.GridFilters();

       var grid = new Ext.grid.EditorGridPanel({
        id: 'grid_w',
        store: dataStore,  // хранилище   
        plugins: filters,
        cm: def_cm, // пустая модель колонок
        listeners: {
                    rowdblclick: {
                       fn: function(e, rowIdx, r){
                                //create_ContragentView(e.store.data.items[rowIdx].id);
                           }
                    },
                    render: {
                        fn: function(){
                            dataStore.load({
                                params: {
                                    start: 0,
                                    limit: 50
                                }
                            });
                        }
                    }
                },
         });
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать реакцию на изменение любого элемента формы. Mik Events/DOM/Window 3 28.07.2011 08:52
Как убрать hover? Либо как сделать стрелки статичными? krusty36 Элементы интерфейса 1 13.07.2011 09:20
Как лучше сделать виджет? comentator Элементы интерфейса 0 25.03.2011 08:44
Как сделать, чтобы при наведении на кнопку справа от нее появлялись текстовые ссылки? Tass Общие вопросы Javascript 7 17.02.2011 09:06
Многостраничная галерея на lightbox.js Как сделать? MASTER Общие вопросы Javascript 9 24.07.2009 14:38