2015-01-18 6 views
-1

У меня есть сетчатая панель (хранилище и модели связаны с ней), где я отображаю все данные в строке мудрым образом. Столбец сетки состоит из столбца действия, где, если человек нажимает, он открывает новую форму в стиле табуляции и пользователь заполняет данные, и он был сохранен в db. Я хочу, чтобы хранилище обновлялось каждые несколько секунд, чтобы эти данные также отображались на панели сетки автоматически. Как я должен это делать?Как обновить магазин/модель каждые несколько секунд?

ответ

0

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

Код, показанный ниже, показывает, как вы можете использовать TaskRunner в ExtJs для перезагрузки хранилища каждые x секунд. Вы также можете добавить setTimeout в событие загрузки хранилища, чтобы каждый раз, когда хранилище загружалось, вы планируете его снова загружать в x секунд.

Ext.application({ 
    name: 'Fiddle', 

    launch: function() { 
     var store = Ext.create('Ext.data.JsonStore', { 
      storeId: 'simpsonsStore', 
      fields: ['name', 'email', 'phone'], 
      autoLoad: true, 
      proxy: { 
       type: 'ajax', 
       url: 'data1.json', 
       reader: { 
        type: 'json', 
        rootProperty: 'characters' 
       } 
      }, 
      listeners: { 
       load: function() { 
        console.log(this); 
       } 
      } 
     }); 

     Ext.create('Ext.grid.Panel', { 
      title: 'Simpsons', 
      store: store, 
      columns: [{ 
       text: 'Name', 
       dataIndex: 'name' 
      }, { 
       text: 'Email', 
       dataIndex: 'email', 
       flex: 1 
      }, { 
       text: 'Phone', 
       dataIndex: 'phone' 
      }], 
      height: 200, 
      width: 400, 
      renderTo: Ext.getBody() 
     }); 

     var runner = new Ext.util.TaskRunner(), 
      task = runner.start({ 
       run: function() { 
        store.reload(); 
       }, 
       interval: 3000 
      }); 

     // IMPORTANT: Dont forget to call stop at a logical point. 
     runner.stop(); 
    } 
}); 

Существует также fiddle, содержащий этот код, который вы можете играть вокруг с.

Если бы мне пришлось пойти с параметрами SetTimeout или TaskRunner для этого, я бы, скорее всего, инициализировал их в событии рендеринга родительской панели/контейнера и прослушал событие beforeDestroy, чтобы остановить их запуск.

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