dojo: Zerstöre alle Widgets von Dom-Knoten

9

Mein Inhalt wird durch Ajax ersetzt, aber manchmal hat ein Element dieselbe ID auf zwei Seiten (dh ein Foto auf der Startseite hat dieselbe ID auf der Galerieseite). Das heißt, wenn dojo.parser.parse aufgerufen wird, versuchen die Widgets erneut hinzugefügt zu werden, und der folgende Fehler wird ausgelöst:

%Vor%

Im Idealfall möchte ich den Befehl destroyRecursive auf dem DOM-Knoten ausführen, den der AJAX ersetzt. Ich habe beide unten ausprobiert, aber beide funktionieren nicht (ich glaube, dass die destructionRecursive für Widgets nicht DOM ist?):

%Vor%

Gibt es eine gute Möglichkeit, dies zu tun, oder muss ich versuchen, sicherzustellen, dass alle meine IDs unterschiedlich sind?

    
Ashley 07.01.2011, 17:03
quelle

4 Antworten

23

Sie sind auf dem richtigen Weg, und Sie haben Recht, dass destroyRecursive nur auf Widgets existiert. Es gibt jedoch eine Reihe von Möglichkeiten, um zu erreichen, was Sie tun möchten.

Wenn Sie Widgets in nennenswertem Umfang verwenden und das fragliche div regelmäßig als Bucket zum Speichern von Inhalten einschließlich Widgets verwendet wird, dann empfehle ich Ihnen einen Blick auf dijit.layout.ContentPane . ContentPane ist ein Widget, das sich hauptsächlich auf die Idee eines Containers konzentriert, der entweder direkt oder über eine URL Inhalte erhält, die Widgets enthalten können oder auch nicht.

Im Moment tun Sie wahrscheinlich so etwas auf jeder Seitenänderung:

%Vor%

Mit einem ContentPane könnten Sie dasselbe tun:

%Vor%

Damit ruft ContentPane nicht nur diese URL ab und behält ihre Inhalte - sie parst auch alle darin enthaltenen Widgets - und ebenso wichtig ist, dass sie alle vorhandenen Widgets automatisch zerstört, bevor sie ihren Inhalt ersetzt.

Sie können mehr darüber in der Dojo-Dokumentation lesen:

Alternativ können Sie, wenn Sie kein Widget für Ihre Inhalte verwenden möchten, nach Widgets in Ihrem div suchen und diese selbst zerstören. Hier ist der einfachste Weg, es zu tun:

%Vor%     
Ken Franqueiro 08.01.2011, 07:17
quelle
4
%Vor%

Wählen Sie im Prinzip den Knoten aus ... Sie können das als Widget-Objekt gemappt bekommen, indem Sie dojo.byNode(node) und dann destroyRecursive(true);

verwenden     
David Cabrera 12.11.2012 17:41
quelle
0

Ich habe ein ähnliches Problem gelöst, indem ich einfach mit dijit.registry.remove ('idName') aus der Registrierung löschte, nachdem ich den Inhalt mit destroyRecursive (false) vor dem Neuladen gelöscht hatte es.

%Vor%     
Hil Zapf 15.06.2016 15:24
quelle
0

Wenn Sie mehr als ein Widget auf einer Seite löschen möchten, funktioniert die folgende Lösung für mich.

%Vor%     
Venkatesan N 28.11.2016 20:05
quelle

Tags und Links