JoJo738
Messages postés1267Date d'inscriptionmercredi 7 juillet 2004StatutMembreDernière intervention29 juin 2010
-
17 août 2008 à 19:35
JoJo738
Messages postés1267Date d'inscriptionmercredi 7 juillet 2004StatutMembreDernière intervention29 juin 2010
-
18 août 2008 à 13:44
Hello tous ;)
Après moult recherches sur le web, n'ayant point trouvé mon bonheur, je me suis mis à programmer ^^
El fait, je cherche à construire à partir de codes Json l'équivalent en Element (afin de m'éviter toute cette tache laborieuse des document.createElement ^^)
Et par soucis de propreté de mon code j'ai decidé de l'implémenter directement dans le Element.prototype
Et là, j'ai un gros soucis ... tout marche, sauf quand je veux passer à l'element enfant (à savoir create.appendChildJsonElements(json[i]);) ou je me retrouve avec une boucle infinie (ici label (ok)/description (ok)/description (plus ok)/description/.../description/...)
Quelqu'un à une idée ??
La fonction :
Element.prototype.appendChildJsonElements = function (json)
{
if( json == 'undefined' ) {
throw 'Error !';
}
else if( json.constructor == String ) {
// element.appendChildJsonElements('TextNode');
this.appendChild(document.createTextNode(json));
}
else {
if( json[0].constructor != String ) {
throw 'The first argument must be a String (name of the Element)';
}
//alert('# createElement("' + json[0] + '");');
// The first argument :
// ['ELEMENT' \[, Args\]]
create = document.createElement(json[0]);
for ( i = 1 ; i < json.length ; i++ ) {
if( json[i] instanceof String )
{
// Text : String format
// ['element', 'texte']
create.appendChild(document.createTextNode(json[i]));
}
else if( json[i] instanceof Array )
{
// New Element [Element \[, Args\]]
// ['element', ['otherelement']]
alert('### createnewelement ' + json[i]);
//create.appendChildJsonElements(json[i]);
create.appendChildJsonElements(json[i]);
}
else if( json[i] instanceof Object )
{
// Arguments {'name' : 'value'}
// ['element', {'name' : 'value', 'name2' : 'value2'}]
for( val in json[i] )
{
create.setAttribute(val, json[i][val]);
}
}
}
this.appendChild(create);
}
}
cs_christophe charron
Messages postés17Date d'inscriptionmardi 28 mars 2006StatutMembreDernière intervention18 août 2008 18 août 2008 à 10:46
Bonjour,
remarque/question certainement très bête car je ne connais rien à l'interaction json xul mais :
<ol><li>Quelle erreur est renvoyée ?</li><li>Comme sait-on que l'on est dans le bons domaine de nom ?</li></ol>Je suis preneur d'infos sur json et xul car c'est en recherchant ce genre d'info que je suis tombé sur ce post (mais je développe en remote xul)
JoJo738
Messages postés1267Date d'inscriptionmercredi 7 juillet 2004StatutMembreDernière intervention29 juin 20102 18 août 2008 à 11:43
Hello,
- Justement, aucune erreur :s C'est juste le code qui tourne en boucle
D'ailleurs, cela ne le fait pas si il y a seulement 1 sous-element :S
- "Le domande de nom" ? Je n'utilise pas de domaine de nom ... Tu veux dire l'element parent auquel on ajoute l'élement crée ? (on extend element grace à element.prototype / le this. permet de le récupérer)
Euh, être en Xul ne change rien, c'est du bon vieux Javascript ^^ (pour ceux qui hésiteraient à répondre )
<hr />Si ma reponse te convient, merci de l'accepter !
cs_christophe charron
Messages postés17Date d'inscriptionmardi 28 mars 2006StatutMembreDernière intervention18 août 2008 18 août 2008 à 12:05
Pour des objets html, en effet, pas besoin de d'utiliser le domaine de nom, mais pour des objets xul, il faut lui indiquer, sinon comment veux-tu qu'il lui attribue les bons attributs/propriétés/méthodes inhérent à xul
Donc pour ajouter un treeitem, par exemple, qui n'existe pas encore en html, il faut
var treeItem = document.createElementNS("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul","treeitem");
idem pour insérer des éléments SVG par exemple ...
JoJo738
Messages postés1267Date d'inscriptionmercredi 7 juillet 2004StatutMembreDernière intervention29 juin 20102 18 août 2008 à 13:44
Re,
Euh ... non, pas besoin. Mon script fonctionne et pas besoin de spécifier les domaines de nom (j'ai bel est bien un rendu correcte (1er niveau)) ^^ (le domaine de nom étant spécifié dans le window)
Apparemment ce serait un problème javascript puisque ma fonction ne fait que traduire des données JS
<hr />Si ma reponse te convient, merci de l'accepter !