2011-05-24 10 views
6

tengo una lista de las noticias en un Ext.List dentro de un panelSencha toque: Actualizar lista: tienda

prj.views.NewsList = Ext.extend(Ext.Panel, { 
    layout: 'card', 
    initComponent: function() {  
     this.list = new Ext.List({    
      itemTpl: '......', 
      loadingText: false, 
      store: new Ext.data.Store({ 
       model: 'News', 
       autoLoad: true, 
       proxy: { 
        type: 'ajax', 
        url: '.....',     
        reader: { 
         type: 'json', 
         //root: '' 
        } 
       }, 
       listeners: { 
        load: { fn: this.initializeData, scope: this } 
       } 
      }) 
     }); 

     this.list.on('render', function(){ 
      this.list.store.load(); 
      this.list.el.mask('<span class="top"></span><span class="right"></span><span class="bottom"></span><span class="left"></span>', 'x-spinner', false); 
     }, this); 

     this.listpanel = new Ext.Panel({ 
      items: this.list, 
      layout: 'fit',    
      listeners: { 
       activate: { fn: function(){ 
        this.list.getSelectionModel().deselectAll(); 
        Ext.repaint(); 
       }, scope: this } 
      } 
     }) 

     this.items = this.listpanel;  
     prj.views.NewsList.superclass.initComponent.call(this); 
    }, 
}); 

Ext.reg('newsList', prj.views.NewsList); 

En una configuración de la barra de herramientas en un dockedItem, tengo un icono para actualizar la lista.

items: [ 
    { 
     iconCls: 'refresh',        
     handler: function() {         
     prj.view.NewsList.list.store.read() 
     } 
    }, 
] 

pero prj.view.NewsList return undefined! ¿Cómo puedo obtener la lista para hacer una actualización de la tienda?

+0

Recupero la tienda por Ext.StoreMgr.get ('newsStore'). Load(). Pero, ¿cómo puedo actualizar el panel con la lista? – BasicCoder

Respuesta

5

Incluso me enfrentaba a un problema similar. Estoy publicando mi respuesta, espero que esto ayude a alguien.

Tengo una barra de búsqueda para buscar datos. (Mi búsqueda se está llevando a cabo en el servidor y los resultados se envían de nuevo a mí en respuesta a mi solicitud GET

Básicamente sólo tenía que cambiar la URL de mi tienda

lo que todos INTENTÉ:.

  1. myList.refresh(),
  2. myStore.load();
  3. despejar la tienda y luego cargarlo
  4. la eliminación de la lista y añadiendo de nuevo y obligándolo a volver a render (usando doLayout())

nada funcionaba ...

sólo añadir una sola línea fija mi problema

function handleSearch(strSearchText) 
    { 
    //myStore.loadData([],false); /tried to clear the store and reloading it 
    if(strSearchText !='') 
    { 
     searchString = '?search='+strSearchText; 
     searchURL = searchURLBasic+ searchString; 
    }else{ 
     searchURL = searchURLBasic; 
    } 
    console.log('search URL: ' + searchURL); 
    myStore.proxy.url =searchURL;   // this was one magical line of code that saved my life 
    myStore.load(); 
} 

Muchas gracias por el apoyo .

14

llamada esta línea en su botón de actualización

Ext.StoreMgr.get('newsStore').load() 

La lista de forma automática se actualice cuando se llama al método load() en la tienda. La tienda está vinculada a la lista.

Ejemplo:

items: [ 
    { 
     iconCls: 'refresh',  
     handler: function(event, btn) { 
      Ext.StoreMgr.get('newsStore').load(); 
     }   
    }, 
] 
1

hago esto cuando se cambia el almacén y funciona como un campeón

var yourbutton = new Ext.Panel({ 
    listeners: { 
     afterrender: function(c){ 
      c.el.on('click', function(){ 
       YourList.update(); 
       YourList.bindStore(newStore); 
      }); 
     } 
    } 
}); 
+0

en Sencha Touch 2.x bindStore no existe. Debería usar setStore() pero también estoy teniendo problemas con eso. – AnthonyVO