Envoyé par : Raphael
Date : 09/10/2006 17:42
Bonjour, en ce moment je teste la sauvegarde/récupération de préférences ainsi que la connexion à une base de données SQLite3... Je décortique donc l'application de MonsieurN : Textree développé en XUL et basé sur SQLite3 qui est forte instructive.
Malheureusement, je me heurte à bon nombre de problèmes :
J'ai bien mes fichier .dtd pour traduire mon application, mais apparement, quand la variable apparait dans un script, il faut utiliser un fichier .properties comme le fait Textree. Et je fais appel à ces variables comme il semble le faire :
__("filepicker.filter")
Mais dans mon appli, cela ne semble pas marcher... faut-il déclarer les .properties quelque part ?
Il semble que j'ai un problème pour tout ce qui touche à un chargement de valeurs ou autres et pour en avoir le coeur net, j'ai fait un petit script :
function getFile() { var nsIFilePicker = Components.interfaces.nsIFilePicker; var fp = Components.classes["@mozilla.org/filepicker;1"] .createInstance(nsIFilePicker); fp.init(window, "Sélectionner YCD", nsIFilePicker.modeOpen); fp.appendFilter("filtre", "*.ycd"); if (fp.show() == nsIFilePicker.returnOK) { document.getElementById('form_name').setAttribute('value', fp.file); } }
Donc, j'appelle cette fonction, je choisis un fichier, et dans mon texbox form_name, il me met :
[xpconnect wrapped nsILocalFile]
Quelqu'un saurait-il me dire d'où vient le problème ?
Textree utilise le code suivant :
var dbFile = prefs.getComplexValue("textree.lastOpenedFile", Components.interfaces.nsILocalFile); if (dbFile && dbFile.exists()) { db = new Db(dbFile); init(); }
Moi, j'ai beau essayer du :
var dbFile = "database.ycd"; if (dbFile && dbFile.exists()) { db = new Db(dbFile); init(); }
Ou du "/home/raph/Programmation/YCD/database.ycd", ben rien n'y fait... j'ai une erreur puisque la fonction init() ne s'exécute jamais.
Là, c'est à n'y rien comprendre ! Textree utilise une variable globale qu'il utilise dans des fonctions dessous de cette manière :
var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); function getFile() { prefs.setCharPref("ydm", "testpreferences"); }
Et çà marche très bien ! Moi, je mets le même code, avec les mêmes libraires, les mêmes loader de librairie en haut, bref, c'est du copier/coller, et ça ne marche pas ! En revanche, si je rajoute la même variable prefs en local, là, ça marche :
var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); function getFile() { var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); prefs.setCharPref("ydm", "testpreferences"); }
Et là, ça marche donc... bref, je comprends vraiment pas... Quelqu'un saurait-il ce qui m'échappe ? Est-ce un bug ? Pour info, je suis sous Linux Ubuntu et j'utilise XULrunner 1.9a1.
Voilà, je suis vraiment largué sur ces problèmes, j'ai eu beau m'acheter un livre sur Javascript et chercher sur Google tant que possible, j'avoue être totalement dépassé là... =(
Je vous remercie donc pour toute l'aide que vous pourrez m'apporter.
Envoyé par : laurentj
Date : 16/10/2006 18:10
__("filepicker.filter")
c'est quoi ce truc __() ?
xpconnect wrapped nsILocalFile
si tu lis la documentation, tu aurais vu que fp.file est un objet de type nsILocalFile. or setattribute attend une chaine comme valeur.. Si tu utilisais les bonnes propriétés de fp.file, ça irait mieux.
Ouverture d'une base de données SQLite3
je ne sais pas, cherche dans les forums
Variables locales et globales
qui te dit que le prefs de textree est global ?
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.