2012-08-20 5 views
0

enter image description hereComment rendre les panneaux dans ExtJS 4

le nombre de panneaux dépend du nombre de données du magasin et devrait rendre sous forme ci-dessus -à-dire deux colonnes

mon code est

Ext.define('ConnectionsFeed.view.Communities',{ 
    extend: 'Ext.container', 
    requires: 'ConnectionsFeed.store.Communities', 
    store: 'Communities', 
    alias: 'widget.communities', 
    layout: 'table', 

initComponent: function(){ 
    var x = this; 
    this.store.each(function(item){ 
    x.add(new Ext.panel.Panel()); 
    }); 
} 
}); 

Ext.create('ConnectionsFeed.view.Communities',{ 
    renderTo: Ext.getBody() 
}); 

mais obtenir l'erreur suivante

> Uncaught TypeError: Cannot read property 'isInstance' of undefined 
> ext-all.js:21 (anonymous function) ext-all.js:21 Ext.apply.doProcess 
> ext-all.js:21 (anonymous function) ext-all.js:21 Ext.apply.require 
> ext-all.js:21 (anonymous function) ext-all.js:21 Ext.apply.doProcess 
> ext-all.js:21 Ext.apply.doProcess ext-all.js:21 Ext.apply.process 
> ext-all.js:21 Ext.Class.c ext-all.js:21 Ext.ClassManager.create 
> ext-all.js:21 Ext.apply.define ext-all.js:21 (anonymous function) 

Répondre

1

Ext.Store.each() appelons une fonction pour chaque élément dans le magasin de données. La fonction en question doit ajouter une instance de votre panneau à un conteneur avec la disposition table.

YourStore.each(function(item) { 
    //container declared elsewhere 
    container.add(new YourPanel(item)); 
}); 
+0

Ext.define ('ConnectionsFeed.view.Communities', { étendent: 'Ext.container', exige: 'ConnectionsFeed.store.Communities', magasin: 'Communautés', alias: ' widget.communities', mise en page: 'table', InitComponent: function() {var x = cela; this.store.each (function (item) { x.add (nouveau Ext.panel.Panel (); }); } }); Ext.create ('ConnectionsFeed.view.Communities', { renderTo: Ext.getBody() }); J'obtenu l'erreur suivante exécuter Uncaught TypeError: Impossible de lire la propriété « isInstance » undefined –

+0

Ext.each() doit être appelée après que le récipient est rendu et après le magasin est chargé. L'ajouter en tant qu'écouteur à l'événement 'load' de Store devrait fonctionner. – Mchl

1

Il vous manque un appel à this.callParent() à la fin de initComponent.

1

Un conteneur n'a également aucun magasin. Vous devrez créer une instance dans votre initComponent et le charger.

Ext.define('ConnectionsFeed.view.Communities', { 
    extend: 'Ext.container', 
    requires: 'ConnectionsFeed.store.Communities', 
    store: 'Communities', 
    alias: 'widget.communities', 
    layout: 'table', 

    initComponent: function() { 
     var x = this; 

     x.store = Ext.create('ConnectionsFeed.store.Communities'); 

     //If you override initComponent you need to call its parent 
     x.callParent(); 
    }, 
    afterRender: function() { 
     var x = this; 

     x.store.load({ 
      scope: x, 
      //Callback function after the store has loaded 
      callback: function(records, operation, success) { 
       Ext.each(records, function(record) { 
        //Your logic of add a panel here 
        x.add(Ext.create('....')); 
       }); 
      } 
     }); 

     x.callParent(); 
    } 
}); 

Ext.create('ConnectionsFeed.view.Communities', { 
    renderTo: Ext.getBody() 
});​