Forums : Xul, Xbl, JS...

Aller à la discussion :  Plus récente Plus ancienne

# Fonctions communiquantes : Dans 1 fichier OK, Entre 2 fichiers : BUG, la variable ne passe pas...

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.

  • Voilà ce qui marche

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 :

  • - Voilà ce qui ne marche malheureusement pas

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.