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:
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;}
);
}
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
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 entryText = entryData[ie].getElementsByTagName("text");
dazu, ob es "text" oder "datetime" o.ä. ist.
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;
}
});
}
hab jetzt auch noch Scriptaculous eingebunden. Visuelle Effekte sind zwar potentiell Spielkram aber diese drei Zeilen
new Effect.Highlight('result1');
var mydrag = new Draggable('result');
var mydrop = new Droppable('result3');
wären wohl ohne diese Libs schon einige Stunden Programmieraufwand, um ein Feld kurz gelb aufleuchten zu lassen und zwei weitere Felder als Drag-Source bzw. Drop-Target zu aktivieren. In der echten Anwendung verzichte ich wahrscheinlich auf Drag&Drop, aber faszinierend ist das schon.
Das Debugging geht sehr gut mit FireBug (ohne solch ein Tool ist es sinnlos), als IDE muss ich mal nach einem Eclipse-Plugin Ausschau halten.