2010-11-28 12 views
0

dans cet exemple: http://dev.sencha.com/deploy/dev/examples/grid/progress-bar-pager.html si je veux mettre un bouton de suppression, après que la ligne est supprimée de la grille, comment puis-je modifier ou supprimer cet enregistrement de myData? Parce que quand je change de page, ou que je clique sur le bouton o rafraîchir, mes lignes/rangs supprimés apparaissent à nouveau. existe-t-il une solution pour changer les données?Extjs, supprimer le bouton

merci beaucoup

Répondre

4

Quelque chose comme:

var grid = ...; // Your grid. 

var button = new Ext.Button({ 
    text: 'Delete row', 
    handler: function() { 
     var record = grid.getSelectionModel().getSelected(); 

     if (record !== undefined) { 
      grid.store.remove(record); 
     } 
    } 
}); 

Si vous souhaitez que vos données soient supprimées pour de vrai, la grille devrait utiliser un magasin à distance qui charge et supprime les données à partir d'un magasin de données réelles. Les éléments suivants signifie des changements locaux seulement:

proxy: new Ext.ux.data.PagingMemoryProxy(myData), 

, vous pouvez essayer de retirer cela et mettre

url: 'http://localhost/path/to/get/data' 

Référez-vous à la documentation pour plus d'informations: http://dev.sencha.com/deploy/dev/docs/?class=Ext.data.Store

+0

votre idée est bonne, mais je veux travailler avec de l'argent et je ne veux pas recharger la base de données chaque fois que je supprime un produit. J'ai aussi une fonction qui sur le clic supprime la ligne de ma base de données mais je ne veux pas recharger la base de données. Si vous avez 10-20 produit c'est OK, mais si vous avez 10.000 ... – cosy

+0

@cosy une suppression ne devrait pas (ou, au moins, pas besoin) provoquer une requery. Si vous faites l'hypothèse que la suppression a fonctionné, ou restaurez l'enregistrement supprimé si la suppression échoue alors @ Kai devrait être bien. – wombleton

+0

Vous pouvez toujours mettre un bouton Save qui enverra une requête AJAX via 'Ext.Ajax.request()' ou en le faisant via 'store.save()'. Assurez-vous juste de mettre 'autoSave' à' false' pour le magasin ou il enregistrera automatiquement les changements. – Tower

1

Si vous regardez à travers la source de cet exemple , il charge les données à partir d'un tableau qui est codé en dur:

Ext.onReady(function(){ 

     var myData = [ 
       ['3m Co',71.72,0.02,0.03,'9/1 12:00am'], 
       ['Alcoa Inc',29.01,0.42,1.47,'9/1 12:00am'], 
       ['Altria Group Inc',83.81,0.28,0.34,'9/1 12:00am'], 
       // ... 
       ['Verizon Communications',35.57,0.39,1.11,'9/1 12:00am'], 
       ['Wal-Mart Stores, Inc.',45.45,0.73,1.63,'9/1 12:00am'] 
     ]; 

myData est recréé à partir de cette définition statique chaque fois que la page se charge, c'est pourquoi les modifications ne persistent pas entre les actualisations.

Vous devez écrire deux scripts côté serveur (par exemple, des scripts PHP). Un produit des données d'enregistrements non supprimés au format JSON ou XML. L'autre supprime les enregistrements de la base de données par ID.

Voici un tutoriel qui couvre l'écriture du script PHP "getter" et le code Ext JS correspondant pour afficher une grille de données sur les produits technologiques: http://www.devarticles.com/c/a/JavaScript/EXT-JS-Passing-Live-Data/. Cela ne concerne que le premier script (celui qui récupère les données de la base de données et les affiche au format JSON), mais il devrait vous aider à démarrer. Cherchez à surcharger le rappel remove du magasin avec une fonction qui envoie une requête AJAX au second script (celui qui supprime les enregistrements de la base de données par ID).

0

c'est la solution myData.splice (1,1);