Envoyé par : mhtagada
Date : 01/12/2009 23:03
Bonjour, j'ai un souci, et ça fait déjà un moment que je cherche des explications mais rien n'y fait, j'ai commencé à me créer une extensions pour firefox et j'ai un élément tree, j'arrive à mettre a jour une ligne existante mais je n'arrive pas a ajouter un élément.
le code du tree
<tree id="siteTree" align="stretch" enableColumnDrag="true" alternatingbackground="true" flex="1" style="width: 5em; height: 2em;" seltype="single" onselect="onSiteTreeSelected();"> <treecols pickertooltiptext=""> <treecol id="nameCol" name="nameCol" label="Site Name" ordinal="1" persist="width ordinal hidden"/> <splitter class="tree-splitter" ordinal="2"/> <treecol id="ipCol" label="IP" ordinal="3" minwidth="120" persist="width ordinal hidden"/> <splitter class="tree-splitter" ordinal="4"/> <treecol id="portCol" label="Port" ordinal="5" minwidth="55" persist="width ordinal hidden"/> <splitter class="tree-splitter" ordinal="6"/> <treecol id="httpsCol" label="Https" ordinal="7" type="checkbox" minwidth="65" persist="width ordinal hidden"/> <splitter class="tree-splitter" ordinal="8"/> <treecol id="usernameCol" label="Username" ordinal="9" hidden="true" persist="width ordinal hidden"/> <splitter class="tree-splitter" ordinal="10"/> <treecol id="passwordCol" label="Password" ordinal="11" hidden="true" persist="width ordinal hidden"/> <splitter class="tree-splitter" ordinal="12"/> </treecols> <treechildren id="siteTreeChildren"/> </tree>
la fonction javascript appelée lors du chargement de la fenetre (onload) est la suivante
function onLoadOption(){ siteTree = document.getElementById("siteTree"); sites = [["Solides", "rezf", "zetre", "false", "Solides", "Solides"]]; var treeView = { childData : { }, visibleData : sites, treeBox: null, selection: null, get rowCount() { return this.visibleData.length; }, setTree: function(treeBox) { this.treeBox = treeBox; }, getCellText: function(idx, column) { return this.visibleData[idx][column.index]; }, getCellValue: function(idx, column) { return this.visibleData[idx][column.index]; }, isContainer: function(idx) { return false; }, isContainerOpen: function(idx) { return false; }, isContainerEmpty: function(idx) { return true; }, isSeparator: function(idx) { return false; }, isSorted: function() { return false; }, isEditable: function(idx, column) { return false; }, getParentIndex: function(idx) { if (this.isContainer(idx)) return -1; for (var t = idx - 1; t >= 0 ; t--) { if (this.isContainer(t)) return t; } }, getLevel: function(idx) { if (this.isContainer(idx)) return 0; return 1; }, hasNextSibling: function(idx, after) { var thisLevel = this.getLevel(idx); for (var t = after + 1; t < this.visibleData.length; t++) { var nextLevel = this.getLevel(t); if (nextLevel == thisLevel) return true; if (nextLevel < thisLevel) break; } return false; }, toggleOpenState: function(idx) { var item = this.visibleData[idx]; if (!item[1]) return; if (item[2]) { item[2] = false; var thisLevel = this.getLevel(idx); var deletecount = 0; for (var t = idx + 1; t < this.visibleData.length; t++) { if (this.getLevel(t) > thisLevel) deletecount++; else break; } if (deletecount) { this.visibleData.splice(idx + 1, deletecount); this.treeBox.rowCountChanged(idx + 1, -deletecount); } } else { item[2] = true; var label = this.visibleData[idx][0]; var toinsert = this.childData[label]; for (var i = 0; i < toinsert.length; i++) { this.visibleData.splice(idx + i + 1, 0, [toinsert[i], false]); } this.treeBox.rowCountChanged(idx + 1, toinsert.length); } this.treeBox.invalidateRow(idx); }, getImageSrc: function(idx, column) {}, getProgressMode : function(idx,column) {}, cycleHeader: function(col, elem) {}, selectionChanged: function() {}, cycleCell: function(idx, column) {}, performAction: function(action) {}, performActionOnCell: function(action, index, column) {}, getRowProperties: function(idx, column, prop) {}, getCellProperties: function(idx, column, prop) {}, getColumnProperties: function(column, element, prop) {}, }; document.getElementById("siteTree").view = treeView; }
lorsque je veut modifier une ligne il me suffit de modifié le contenu de la ligne correspondante dans mon tableau "sites", et l'affichage est alors automatiquement mis à jour, par contre lorsque je veux ajouter un élément l'affichage de l'arbre n'est pas mis à jour, et lorsque je fait
siteTree.builder.rebuild();
alors j'ai une erreur
Erreur : siteTree.builder is null Fichier Source : chrome://gema/content/options.js Ligne : 160
lorsque je fait
siteTree.view.treebox.invalidate();
alors j'ai une erreur
Erreur : siteTree.view.treebox is undefined Fichier Source : chrome://gema/content/options.js Ligne : 160
Merci :)
Envoyé par : laurentj
Date : 11/12/2009 17:05
salut,
siteTree.builder is null
normal, y a un builder que lorsqu'il y a un template, ce qui n'est pas le cas ici.
siteTree.view.treebox
siteTree.view est ton treeview, et tu n'as pas de propriété treebox dessus (ce qui est correct), donc normal.
par contre, tu devrais essayer siteTree.treeboxObject.invalidate(); Si ça ne fonctionne pas, tu peux aussi faire un siteTree.view = null; siteTree.view = treeView (que tu devrais d'ailleurs sortir de la fonction onLoadOption)
Envoyé par : mhtagada
Date : 12/12/2009 20:11
Merci
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.