2011-05-24 5 views
6

J'ai une liste de nouvelles dans un Ext.List intérieur d'un panneauSencha-touch: actualiser la liste: magasin

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); 

Dans une configuration de la barre d'outils dans un dockedItem, j'ai une icône pour actualiser la liste.

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

mais prj.view.NewsList retour undefined! Comment puis-je obtenir la liste pour faire un rafraîchissement du magasin? méthode

+0

Je récupère le magasin par Ext.StoreMgr.get ('newsStore'). Load(). Mais comment puis-je actualiser le panneau avec la liste? – BasicCoder

Répondre

5

Même je faisais face à un problème similaire. Je poste ma réponse espère que cela aide quelqu'un.

J'ai une barre de recherche pour rechercher des données. (Ma recherche est en cours au serveur et les résultats sont renvoyés à moi en réponse à ma demande GET

Fondamentalement, je devais juste changer l'URL de mon magasin

QU'EST-CE QUE TOUS I Tried.

  1. myList.refresh(),
  2. myStore.load();
  3. effacer le magasin puis le charger
  4. retirer la la liste et l'ajouter à nouveau et le forçant à nouveau rendre (à l'aide doLayout())

... Rien n'a fonctionné

simplement ajouter une seule ligne fixe mon problème

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(); 
} 

SO pour le soutien THanks .

14

Appel cette ligne sur votre bouton Actualiser

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

La liste est rafraichir automatiquement lorsque vous appelez la charge() sur le magasin. Le magasin est lié à la liste.

Exemple:

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

Je le fais lors du changement de la boutique et il fonctionne comme un champion

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

sur Sencha Touch 2.x bindStore n'existe pas. Devrait utiliser setStore() mais j'ai aussi des problèmes avec ça. – AnthonyVO

Questions connexes