2012-09-19 7 views
8

Ho tentato di utilizzare questo esempio e di aggiungere CRUD di base a un albero.Come eliminare elementi da un albero

http://dev.sencha.com/deploy/ext-4.0.0/examples/tree/treegrid.html

Per ora, voglio solo eliminare un elemento dall'albero. Ho aggiunto il pulsante e ho questo sotto clic:

click : function() {; 
    var record = tree.getSelectionModel().getSelection()[0]; 
    store.destroy(record); 
    store.sync(); 
} 

Ho verificato la registrazione e il negozio esistono. Il negozio è di tipo TreeStore come nell'esempio. Se controllo la richiesta inviata, è solo []. Tutto ciò che ho nel mio proxy al momento è questo:

var store = Ext.create('Ext.data.TreeStore', { 
    storeId : 'treeStore', 
    model : 'Task', 
    proxy : { 
     type : 'ajax', 
     // the store will get the content from the .json file 
     url : '../resources/data/treegrid.json' 
    }, 
    folderSort : true 
}); 

Fare clic su Elimina non rimuove l'elemento attualmente selezionato. Devo impostare un URL di distruzione appropriato nel proxy e perché non invia alcun dettaglio su ciò che deve essere eliminato nell'intestazione della richiesta? Non c'erano altri esempi di CRUD da un albero che potessi trovare.

enter image description here


EDIT:

nota che la ragione per la confusione di utilizzare store.destroy(record) era che Ext.data.Store ha un metodo remove(record) ma Ext.data.TreeStore no. Inoltre, un approccio alla distruzione breve è record.destroy() anziché record.remove(true).

Nota tuttavia che ho ricevuto errori facendo record.destroy() o record.remove(true). Presumibilmente lo store deve conservare i nodi da inviare come JSON, quindi utilizzare record.remove().

risposta

13

Il tree store non ha alcun metodo di distruzione. Poiché il record proviene da una tre stelle, è decorato con un node interface. Quindi usa il metodo di rimozione (con l'opzionale destroy).

var record = tree.getSelectionModel().getSelection()[0]; 
    record.remove(true); 
    store.sync(); 
+0

Grazie, stupido errore da parte mia :) Posso anche vedere l'elemento eliminato con 'store.getRemovedRecords()' prima che venga inviato al proxy. –

+3

Ho usato 'record.remove()' altrimenti ha dato errori. –