Gewusst wie: löschen eines Knotens aus einem Extern TreePanel, wenn der Knoten noch nicht erbracht
Habe ich gefunden, die kann ich nicht löschen Knoten, die noch nicht gerendert wurde noch. Der folgende code zeigt was ich meine. Ich habe es aus dem Chrome und Firebug ist) Befehl Linie, während auf http://dev.sencha.com/deploy/dev/exa...dow/hello.html (da die Seite extern vorgespannt)
Ich tippte jede Anweisung separat, um sicherzustellen, gab es keine Probleme mit asynchronen Operationen (auch wenn die Struktur der Daten im Speicher)
Ext.getBody.update('');
//Tree with preloaded nodes in memory
var tree = new Ext.tree.TreePanel({
renderTo: Ext.getBody(),
width: 300,
height: 500,
rootVisible: false,
loader: new Ext.tree.TreeLoader({preloadChildren:true}),
root: new Ext.tree.AsyncTreeNode({
expandend: true,
children: [
{text: 'Folder 1', id: 'folder1', leaf: false, children: [
{text: 'File 1', id: 'file1', leaf: true},
{text: 'File 2', id: 'file2', leaf: true}
]}
]
})
});
//Try to delete 'File 1', notice that the folder has never been expanded
tree.getRootNode().childNodes[0].childNodes[0].remove(true);
//Expand the node and see that 'File 1' is still there
tree.getRootNode().childNodes[0].expand();
//Delete the first child 1 again, it works now that it's been rendered
tree.getRootNode().childNodes[0].childNodes[0].remove(true);
Irgendwelche Vorschläge, was zu tun ist?
ANTWORT
var nodeToRemove = tree.getRootNode().childNodes[0].childNodes[0];
if (!nodeToRemove.rendered) {
var children = node.parentNode.attributes.children;
Ext.each(children, function(child, index){
if (child.id == nodeToRemove.id) {
chilren.splice(index, 1);
return false;
}
}) ;
} else {
nodeToRemove.remove(true);
}
Warum gehören die Knoten, wenn Sie wollen, um Sie zu löschen irgendwie?
Dies ist offensichtlich nicht der eigentliche code, der verwendet wird, es ist nur eine Reduzierung. Der Baum ist ein Blick auf die Daten, die andere stellen im code löschen kann, die 'Dateien', bevor Sie Ihre 'Ordner' ist erweitert in den Baum.
Dies ist offensichtlich nicht der eigentliche code, der verwendet wird, es ist nur eine Reduzierung. Der Baum ist ein Blick auf die Daten, die andere stellen im code löschen kann, die 'Dateien', bevor Sie Ihre 'Ordner' ist erweitert in den Baum.
InformationsquelleAutor Juan Mendes | 2011-01-31
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ext.Baum.TreePanel ist die eine Komponente, die ich hasse am meisten (gefolgt von FormPanel).
Hier ist, was passiert: Die TreeLoader lädt das root-node Kind-Knoten von seiner ursprünglichen config-Objekt, und so funktioniert ein Aufruf AsyncTreeNode.erweitern, die im Grunde zurücksetzen der Baum.
So, Sie sind gonna haben, um entfernen Sie die Knoten aus Ihren Stammknotens config wie diese vor der Expansion:
Edit: Eigentlich ist dies mehr intuitiv:
(nicht die gleiche Sache, da
root.childNodes[0].attributes === root.attributes.children[0]
)Es funktioniert, vielen Dank! Ich bin auf die Suche nach dem tatsächlichen Fehler in Ihrem code.
Recht. Eigentlich ist es nicht der Lader hat die Aufgabe, denken Sie daran, die Knoten wurden vorgespannt. Der root-Knoten-flags sich geladen. Dennoch
Folder 1
ist nicht gekennzeichnet geladen, so, wenn Sie rufenexpand()
, der Lader springt wieder an.InformationsquelleAutor user123444555621
Ich endlich kapiert, eigentlich Condor von Ext-JS-Unterstützung figured it out für mich.
War das problem, dass standardmäßig eine TreeLoader löscht seine Kinder, wenn TreeLoader#reload genannt wird (es heißt durch AsyncTreeNode#expand(), wenn die clearOnLoad-option ist true (Standard).
So schafft mein Baum-loader mit
clearOnLoad: false
behebt mein problem. Außer, wenn ich entfernen Sie alle untergeordneten Knoten. Zu beheben, brauchte ich folgenden patch:Hier ist ein link auf die ext-js-thread:
http://www.sencha.com/forum/showthread.php?122681-Deleting-unrendered-nodes-from-a-tree-doesn-t-work&p=567459#post567459
@Pumbaa: Das ist eine Lösung, eher als einen workaround, wie Sie vorgeschlagen, aber ich bin wirklich dankbar für Eure Hilfe.
InformationsquelleAutor Juan Mendes
Bis das treenode-Objekt erweitert wird, die Elemente sind noch nicht initialisiert ExtJS-Komponenten. Bis zu diesem Zeitpunkt sind Sie einfach nur sitzen in der array von untergeordneten Elementen (xtyped standard-javascript-Objekte) betrachten TreeNode.childNodes in den API-docs. Versuchen Sie, Sie zu entfernen aus, dass array zu erweitern und dann den Artikel. Das sollte den trick tun
Cheers,
Rob
Hallo Rob: mit einem treeloader mit preloadChildren auf true gesetzt, werden alle Knoten, die in das Kinder-array instanziiert, wenn das treepanel gerendert wird (obwohl die entsprechenden TreeNodeUI nicht gerendert bis es ausgebaut). Was meinst du mit entfernen Sie Sie aus diesem array? Das ist das, was mein code macht. Sie meinte wahrscheinlich das löschen von Parametern.Kinder-array, aber das funktioniert nicht: - Attribute.Kinder, ist irrelevant, nachdem die TreeNode-Objekte wurden erstellt von der config und in die childNodes-array.
Sorry, ich war falsch. Froh, dass jemand anderes helfen könnte
InformationsquelleAutor Rob Boerman