2013-02-13 3 views
0

d'abord je pensais que c'est un problème simple mais je ne pouvais pas le résoudre de toute façon.Extjs mvc ajouter un enregistrement au panneau de la grille

J'ai un panneau de grille extjs, son magasin et son modèle. Depuis le contrôleur, je peux insérer de nouveaux enregistrements à stocker, quand j'utilise firebug et debug, je peux lister tous les nouveaux enregistrements dans le magasin (panel.store.data.items) mais dans la grille, je ne peux pas le rendre visible.

Pourriez-vous me dire où et ce qui me manque? Pourquoi les enregistrements ne sont pas répertoriés dans la grille?

Ceci est mon modèle

Ext.define('BOM.model.PaketModel', { 
    extend: 'Ext.data.Model', 
    fields: [ 
     { name: 'seriNo', type: 'string' }, 
     { name: 'tutar', type: 'string' }, 
    ] 
}); 

C'est le magasin

Ext.define('BOM.store.PaketStore', { 
    extend: 'Ext.data.Store', 
    model: 'BOM.model.PaketModel', 
    proxy: { 
     type: 'memory', 
     reader: { 
      type: 'json', 
      root: 'data', 
     }, 
     writer: { 
      type: 'json', 
      root: 'data', 
     }, 
    }, 

}); 

Ceci est la méthode que j'ajouter de nouvelles lignes

addNew: function() { 
     this.getPaketWindow().returnRowEdit().cancelEdit(); 
     this.getPaketWindow().getStore().insert(0, new BOM.model.PaketModel()); 
     this.getPaketWindow().returnRowEdit().startEdit(0, 0); 
    } 

MISE À JOUR VIEW

Ext.define('BOM.view.PaketCreate', { 
    extend: 'Ext.grid.Panel', 
    alias: 'widget.paketcreate', 
    bodyPadding: 5, 
    layout: 'fit', 

    header:false, 

    initComponent: function() { 

     this.columns = [ 
      { text: 'Seri No',  flex: 2, sortable: true,  dataIndex: 'seriNo',  field: {xtype: 'textfield'} }, 
      { text: 'Tutar',   flex: 2, sortable: true,  dataIndex: 'tutar',   field: {xtype: 'textfield'} } 
     ]; 
     this.dockedItems = [{ 
      xtype: 'toolbar', 
      items: [{ 
       text: 'Ekle', 
       id:'addNewCheck', 
       iconCls: 'icon-add', 

      },'-',{ 
       id: 'deleteCheck', 
       text: 'Sil', 
       iconCls: 'icon-delete', 
       disabled: true, 
      }] 
     }]; 
     this.store = 'BOM.store.PaketStore'; 
     rowEditing = Ext.create('Ext.grid.plugin.RowEditing', { 
      clicksToMoveEditor: 1, 
      autoCancel: false 
     }); 
     this.plugins = rowEditing, 
     this.callParent(arguments); 
    }, 
    returnRowEdit: function() { 
     console.log("row editing..."); 
     return rowEditing; 
    } 
}); 
var rowEditing; 
+0

pouvez-vous ajouter le code 'view'? –

+0

J'ai mis à jour avec le code de vue – tkcn

+0

J'ai trouvé le problème mais je n'ai aucune explication. this.getPaketWindow() retourne la vue et je pourrais accéder au magasin avec this.getPaketWindow(). getStore(). Cependant, this.getPaketWindow(). GetView(). GetStore(). Insert (0, new ...) vient de fonctionner. Pourquoi avons-nous besoin de getView() pourquoi existe-t-il deux magasins différents? – tkcn

Répondre

0

Il fonctionne quand j'ajoute ".getView()" comme

this.getPaketWindow() .getView(). getStore(). insert (0, nouveau BOM.model.Paket Model())

Cependant, je ne comprends toujours pas. Les deux atteint le même magasin lorsque j'ajoute des enregistrements manuellement, je peux les voir dans le store.data mais il est visible uniquement si j'inclue .getView() partie

1

Essayez:

this.store = Ext.create('BOM.store.PaketStore'); 

au lieu de:

this.store = 'BOM.store.PaketStore'; 

http://jsfiddle.net/qzMb7/1/

+0

J'ai essayé mais c'est toujours pareil, il y a des données dans le magasin mais pas dans la grille. Si j'ajoute des données manuellement (comme, données: [...]) cela se voit mais avec insertion ça ne marche pas. – tkcn

Questions connexes