Löschen / Ersetzen Eines Knotens in E4X (AS3 - Flex)
Baue ich eine Liste/raster-Steuerelement in einem Flex
Anwendung und verwenden Sie es in einem .NET
web-Anwendung. Um eine wirklich lange Geschichte kurz, ich bin immer XML aus webservice von serialisierten Objekten. Ich habe eine Seite zu begrenzen, wie viele Dinge auf einer Seite. Ich habe eine Daten-grid und machte es Seite, ungefähr auf allen Seiten und Griff einige grundlegende Filterung.
In Bezug auf die paging-ich bin mit einem Wörterbuch eingegeben auf der Seite und speichern Sie die XML-Seite. Diese Weise, wenn ein Benutzer kommt zurück, um eine Seite, die ich gespeichert hab in diesem Wörterbuch, das ich greifen kann, die XML-Daten aus lokalen Speicher anstelle des Schlagens des webservice. Im Grunde bin ich das caching der abgerufenen Daten von jedem Aufruf der webservice für eine Seite von Daten.
Gibt es mehrere Dinge, die ablaufen können, mein cache. Filtern und Sortieren sind der Hauptgrund. Allerdings kann ein Benutzer Bearbeiten eine Zeile von Daten in das Netz, öffnen Sie einen editor. Die Daten, die Sie Bearbeiten konnte, dass die Daten in der Zeile angezeigt werden abgestanden. Ich könnte leicht gehen Sie zu der webservice-und die ganze Seite von Daten, aber da die Seite Größe wird zur Laufzeit festgelegt, ich konnte sein Blick auf eine große Menge von Datensätzen abzurufen.
Lassen Sie mich nun zum Kern des Problems, die ich erlebe. Um zu verhindern, dass sich die ganze Seite, die Daten wieder mache ich einen Aufruf der webservice-Fragen, für die vollständig aktualisierte Eintrag (der editor verarbeitet das speichern Ihrer Daten).
Da bin ich mit benutzerdefinierten Objekte, die ich brauche, um zu serialisieren, die auf dem server in XML (dies wird behandelt, die bereits für die anderen Teile unserer software). Alle Daten werden über XML e4x. Der cache im Wörterbuch gespeichert ist, als ein XMLList-Objekt.
Nun lassen Sie mich Ihnen zeigen, dass mein code...
var idOfReplacee:String = this._WebService.GetSingleModelXml.lastResult.*[0].*[0].@Id;
var xmlToReplace:XMLList = this._DataPages[this._Options.PageIndex].Data.(@Id == idOfReplacee);
if(xmlToReplace.length() > 0)
{
delete (this._DataPages[this._Options.PageIndex].Data.(@Id == idOfReplacee)[0]);
this._DataPages[this._Options.PageIndex].Data += this._WebService.GetSingleModelXml.lastResult.*[0].*[0];
}
Grundsätzlich, ich bekomme die id des Knoten I wollen, um zu ersetzen. Dann finde ich es in der cache-Data-Eigenschaft (XMLList
). Ich sicher, dass es existiert, da der filter in der zweiten Zeile gibt den XMLList
.
Das problem, das ich habe, ist mit der Zeile löschen. Ich kann nicht machen, dass die Zeile löschen, die Knoten aus der Liste. Die Zeile nach der Zeile löschen funktioniert. Ich habe die Knoten der Liste.
Wie kann ich ersetzen oder zu löschen, Knoten (d.h. die Knoten, die finde ich von der filter-Anweisung aus der .Data-Eigenschaft des cache)???
Hoffentlich die Unterstriche für alle meine Variablen bleiben nicht entgangen, wenn dieser gepostet wird! ansonsten this._ == this
._
InformationsquelleAutor Mike G | 2008-08-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Danke für die Antworten Jungs.
@Theo:
Ich habe versucht, die ersetzen Sie verschiedene Möglichkeiten. Für einige Grund, es würde nie Fehler, aber nie die Liste aktualisieren.
@Matt:
Ich fand eine Lösung. Das Problem war nicht aus dem, was Sie vorgeschlagen, aber von dem, wie das löschen funktioniert mit Listen (zumindest wie ich es in diesem Fall).
Die Data-Eigenschaft des _DataPages dictionary-Objekt ist eine Liste der definition von Knoten (kam durch eine Vorherige Filterung von einem anderen XML-Dokument).
Ich endete damit, diesen kleinen deal:
Also im Grunde ich hatte, um den index des Knotens im XMLList-Objekt, das die Eigenschaft Data. Von dort aus könnte ich mit dem delete-Schlüsselwort, um es zu entfernen aus der Liste. += Fügt meiner neuen Knoten an die Liste.
Ich bin also verwendet, um mit Hilfe der ActiveX-oder Mozilla-XmlDocument-Sachen, wo Sie anrufen "SelectSingleNode" und verwenden Sie dann "replaceChild", das zu tun diese Art von Sachen. Naja, zumindest wird dies in einigen Forums, wo jemand anderes es finden kann. Ich weiß nicht, die Prozedur für das, was passiert, wenn ich die Antwort auf meine eigene Frage. Vielleicht ist diese Erkenntnis wird helfen, jemand anderes zusammen kommen und helfen bei der Beantwortung der Frage besser!
InformationsquelleAutor Mike G
Vielleicht könnten Sie
replace
statt?InformationsquelleAutor Theo
Ich weiß, das ist eine sehr alte Frage, aber ich sehe nicht (was ich denke, ist) die einfachste Lösung für dieses problem.
Theo hatte die richtige Richtung, aber es gibt eine Anzahl von Fehlern, die mit der Art und Weise ersetzen wird (und die Tatsache, dass so ziemlich alles in E4X ist eine Funktion).
Ich glaube, dies wird den trick tun:
replace()
können eine Reihe von verschiedenen Arten im ersten parameter, aber AFAIK, XML-Objekte sind nicht einer von Ihnen.InformationsquelleAutor Harbs
Ich nicht sofort das problem sehen, so kann ich nur Vermutungen. Die
delete
Linie, die Sie haben, ist auf der Suche für den ersten Punkt auf der obersten Ebene der Liste, die ein Attribut "Id" mit einem Wert in Höhe vonidOfReplacee
. Sicherzustellen, dass Sie nicht brauchen, um tiefer in die XML-Struktur zu finden, die passenden id.Versuchen Sie dies:
(Beachten Sie die zusätzlichen '.' nach
Data
). Sie kann sich leichter Debuggen, indem Sie einen Haltepunkt in der zweiten Zeile der code, den Sie geschrieben, und sicherzustellen, dass das XMLList-Objekt sieht aus wie Sie es erwarten.InformationsquelleAutor Matt Dillard