Envoyé par : Raphael
Date : 11/10/2006 22:24
Bonjour, voici mon problème : J'ai 2 fichier main.js et cards.js pour y voir un peu plus clair.
main.js
var loader = Components.classes["@mozilla.org/moz/jssubscript-loader;1"].getService(Components.interfaces.mozIJSSubScriptLoader); loader.loadSubScript("chrome://ydm/content/cards.js");
cards.js
function setCardlist() { var cards = getAllCards(); var liste = $("cardlist"); for (var i = 0 ; i < cards.length ; i++) { var item = document.createElement('listitem'); item.setAttribute('Card_ID', cards[i].Card_ID); var cell1 = document.createElement('listcell'); cell1.setAttribute('label', cards[i].Reference+" "); var cell2 = document.createElement('listcell'); cell2.setAttribute('label', cards[i].Name); item.appendChild(cell1); item.appendChild(cell2); liste.appendChild(item); } } function getAllCards() { db = connectycd(); var statement = Components.classes['@mozilla.org/storage/statement-wrapper;1'].createInstance(Components.interfaces.mozIStorageStatementWrapper); var results = new Array(); var s = db.createStatement("SELECT Card_ID, Reference, Name FROM cards ORDER BY Card_ID ASC"); while (s.executeStep()) { results.push({"Card_ID": s.getInt32(0), "Reference": s.getString(1), "Name": s.getString(2)}); } return results; }
Mais je voudrais séparer la recherche des données à leur affichage en mettant ma fonction setCardlist
dans main.js de cette manière :
main.js
var loader = Components.classes["@mozilla.org/moz/jssubscript-loader;1"].getService(Components.interfaces.mozIJSSubScriptLoader); loader.loadSubScript("chrome://ydm/content/cards.js"); function setCardlist() { var cards = getAllCards(); var liste = $("cardlist"); for (var i = 0 ; i < cards.length ; i++) { var item = document.createElement('listitem'); item.setAttribute('Card_ID', cards[i].Card_ID); var cell1 = document.createElement('listcell'); cell1.setAttribute('label', cards[i].Reference+" "); var cell2 = document.createElement('listcell'); cell2.setAttribute('label', cards[i].Name); item.appendChild(cell1); item.appendChild(cell2); liste.appendChild(item); } }
cards.js
function getAllCards() { db = connectycd(); var statement = Components.classes['@mozilla.org/storage/statement-wrapper;1'].createInstance(Components.interfaces.mozIStorageStatementWrapper); var results = new Array(); var s = db.createStatement("SELECT Card_ID, Reference, Name FROM cards ORDER BY Card_ID ASC"); while (s.executeStep()) { results.push({"Card_ID": s.getInt32(0), "Reference": s.getString(1), "Name": s.getString(2)}); } return results; }
Un simple cards.length
dans main.js ne marche pas alors qu'un results.length
dans cards.js marche lui... Je retourne pourtant bien le tableau results que je mets dans la variable cards non ? Et je charge bien le fichier cards.js puisque mes fonctions sont appelées depuis main.js. Mais mon "tableau" n'arrive pas à transiter entre les 2 fichiers !?
Voilà, je vois bien que la même technique marche sur le logicel Textree également développé en XUL... mais ça ne marche pas chez moi, et il semble que j'ai d'autres problèmes de variables qui ne semblent pas passer de fonctions en fonctions.
Je ne comprends absolument pas pourquoi, quelque chose m'échappe ? Dois-je procéder autrement ? Ai-je oublier de déclarer quelque chose ? d'enregistrer quelque chose ?
Merci d'avance...
Il n'est plus possible de poster des messages dans ce forum.
Copyright © 2003-2013 association xulfr, 2013-2016 Laurent Jouanneau - Informations légales.
Mozilla® est une marque déposée de la fondation Mozilla.
Mozilla.org™, Firefox™, Thunderbird™, Mozilla Suite™ et XUL™
sont des marques de la fondation Mozilla.