Domino 9 und frühere Versionen > ND7: Entwicklung

Ansicht mit ?ReadViewEntries und Prototype auslesen

(1/2) > >>

Mark³:
Ich bin dabei, eine Ansicht mit der Prototype.js-Bibliothek auszulesen. Obwohl es dazu einige Beispiele im Web gibt finde ich nichts konkretes.
Momentan stochere ich hier rum aber irgendwie drehe ich mich im Kreis, bekomme immer die gleichen Nodes:


--- Code: ---function parseResponse(theText) {
    viewEntries = $A(theText.responseXML.getElementsByTagName('viewentry'));

var entries = viewEntries.each(function(node){
   entryData = node.getElementsByTagName('entrydata');
   return( $A(entryData));
});
var zugmoData = $A(entries.each(function(entry){
return($A(entry));
}));
var childNodes = zugmoData.each(function(childNode){
return($A(getXmlNodeValue(childNode)));
});
return zugmoData;
}
 
function getXmlNodeValue(xmlNode){
return Try.these(
function() {return xmlNode.text;},
function() {return xmlNode.textContent;}
);
}

--- Ende Code ---

William Beh hatte ein Beispiel dazu, aber er hat irgendwie die Prototype-Befehle gar nicht genutzt sondern normale for-Schleifen genommen. Hat jemand das schon mal durchgängig mit Prototype (oder Scriptaculous o.ä.) gemacht? Oder eine Idee für mich? Ich hatte das obige Beispiel auch schon geschachtelt aber irgendwie gehe ich methodisch falsch vor, sehe aber heute nix mehr  O0

flaite:
Keine Ahnung. Aber mit 7.02 wird auch JSON unterstützt (allerdings inoffiziell und das Format wird sich noch ändern).
http://www.codestore.net/store.nsf/unid/BLOG-20070125
Xml Parsing mit javaScript muss wirklich nicht so einfach sein.

Mark³:
bei Codestore war ich natürlich als allererstes. 7.0.2 hab ich noch nicht, ich möchte nicht nur wegen dieser Anwendung alle Server bei uns upgraden. Ausserdem ist dieses JSON wohl 7.0.2-spezifisch, da noch unsupported.
Ich habe auch schon überlegt, eine View oder einen Agenten zu bauen, die mir JSON liefern. Aber dann verteilt sich die Logik wieder auf mehrere Stellen, das gefällt mir nicht so.

Vielleicht habe ich heute bessere Ideen. Prototype wurde ja extra für AJAX und ähnliches gemacht, daher sind da sicher geeignete Methoden drin, um die XML-Response zu parsen. Ich muss wohl noch etwas in der Hilfe lesen...

Mark³:
ich mache das jetzt klassisch, nutze nur ein paar Prototype-Hilfen, ist auch noch Alpha-Stadium. So bekomme ich aus einer View die Werte einer Spalte (Parameter fieldName). Wichtig ist, dass man im zugehörigen ?ReadViewEntries die Option PreFormat wählt, da nur dann auch Zahlen und Daten übernommen werden (sonst müsste noch eine Unterscheidung bei
--- Code: --- entryText = entryData[ie].getElementsByTagName("text");
--- Ende Code ---
dazu, ob es "text" oder "datetime" o.ä. ist.


--- Code: ---function getResult(req, fieldName) {
  var xmlDoc = req.responseXML;
  var allEntry = new Array(0);
  viewEntries = xmlDoc.getElementsByTagName('viewentry');
   
   for (var i=0; i < viewEntries.length; i++) {
   var colEntry = new Array(10);
      entryData = viewEntries[i].getElementsByTagName("entrydata");
      for (var ie=0; ie < entryData.length; ie++) {
      if (entryData[ie].getAttribute('name') ==fieldName) {
            entryText = entryData[ie].getElementsByTagName("text");
            try {
            for (var it=0; it < entryText.length; it++) {
                  if (entryText[it].firstChild) {
                         colEntry[ie] = entryText[it].firstChild.nodeValue;
                        }
                    else {
                    colEntry[ie] = null;
}
                  }
            }
            catch (e) {
            alert (e);
}
}
        }
        if (colEntry)
allEntry.push($A(colEntry).compact());
      }

return allEntry.sortBy(function(zahl){
if ( isNaN(zahl)) {
return 0;
}
else {
return zahl;
}
});
}     

--- Ende Code ---

flaite:
Diese Libraries wie DOJO oder Prototype oder überhaupt nur alles Libraries sind ja Abstraktionen, die das Programmieren nicht zwangsläufig immer einfacher machen. Charles Lowell von DrunkAndRetired hat sich ja oft recht deftig über die übertriebene OO der JavaScript Libraries geäussert. Es gibt 2 Möglichkeiten (wobei beides auch in verschiedenen Mischungsverhältnissen auftreten kann):
a) du kennst die Libraries nicht gut genug.
b) die Libraries stehen dir für deinen Zweck im Weg.

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln