ExtJS 4: ergänzen Sie die Kinder-Baum-Knoten zu einem nicht-Root-Knoten dynamisch?
Ich bin versucht, hinzuzufügen Kinder-Baum-Knoten zu einem nicht-Root-Knoten dynamisch, wenn es ausgewählt ist.
Dies ist, wie ich es umgesetzt:
Erste, die ich füllen mein Baum mit ein TreeStore dann dynamisch hinzufügen Kinder Knoten im Baum, ich Griff es auf die itemexpand Veranstaltung in Baum-Controller.
//pThis is a NodeInterface obj of the selected node
itemexpand: function (pThis, pEOpts) {
//type is an attribute that I added so that I know what type of node that got selected
if (pThis.raw.type === 'Staff' && !pThis.hasChildNodes()) {
var staffNodeAry = [{text:"Teachers", type:"ChildStaff", leaf: false},
{text:"Principals", type:"ChildStaff", leaf: false}];
pThis.appendChild(staffNodeAry);
}
}
Dies klappte auch ganz gut, denn ich bin in der Lage, um zu sehen, die beiden "Lehrer" und "Schulleiter" - Knoten unter "Personal" geben, aber es gibt 2 Probleme, die ich bisher gefunden:
1) gibt Es diese Fehlermeldung auf der Konsole:
Uncaught TypeError: Cannot read property 'internalId' undefined
Ich weiß nicht warum, aber wenn jemand aufklären könnte, das wäre toll.
2) Wenn ich erweitern entweder mit "Lehrer" und "Schulleiter", die NodeInterface obj, das zurückgegeben wird, durch itemexpand eine Undefinierte raw-Objekt.
So, ich konnte es nicht tun: pThis.raw.geben Sie
Aus meinem Verständnis, ich brauche nicht eine neue zu erstellen TreeStore hinzufügen jeder neuen Kindern Knoten, ich dachte, dass durch das anlegen eines array von Objekten, die sich auf NodeInterface sollte genug sein, aber ich könnte falsch sein.
Wenn jemand könnte mich in die richtige Richtung, das wäre toll.
Handi
Mehr info:
Was ich Tat, war eigentlich nach der ExtJs 4 Dokumentation so ich glaube das ist ein bug der auf ExtJs 4-framework.
Ich auch getestet, mit Extjs-4.1.0-rc3 und es produziert auch die gleichen Fehler.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich dieses Problem behoben die änderung der Ereignis - itemexpand mit der Veranstaltung afteritemexpand. Ich habe keine Dokumentation zu rechtfertigen. Der debugger sagt mir, dass die Ansicht hören, für die itemexpand Veranstaltung und machen etwas, das schief geht, wenn Sie einen Knoten hinzufügen manuell...
Für die Frage Nummer 2: haben Sie keine raw-Objekt, weil es ist geschaffen durch die Leser der store nach dem Ladevorgang. Also, wenn Sie einen Knoten hinzufügen, indem Sie die hand der raw-Objekt nicht existiert.
http://docs.sencha.com/ext-js/4-1/#!/api/Ext.Daten.Modell-Eigentum-raw
In der Dokumentation .appendChild () - Funktionen, die sagt:
Und Sie versuchen zum Anhängen einer Reihe von 2 Objekten, aber Sie sind nicht "NodeInterface" Instanzen. So erstellen Sie Sie richtig so:
Erinnere ich mich daran, den gleichen Fehler vor einem Jahr, also ich hoffe, das hilft.
Ich denke, es passiert, weil deine Ext.TreePanel arbeiten asyncroniously. So fügen Prozess ist:
Dem Ziel der änderung festgelegt ist internakId Eigenschaft, so können Sie neue Kind nur nach dieser änderung geschieht. Ich denke, besser ist schreiben einige rekursive Funktion und binden Sie es zum speichern der Ereignis -
oder