Newsgroup: it.comp.lang.javascript
Titolo: Javascript, XUL e Tree

Un saluto e Buona Pasqua a tutto il NG.
Ho un problema con una pagina XUL che contiene un oggetto Tree.
Questo albero visualizza (come una lista) dei dati riepilogativi 
relativi ad una funzione di inventario.
Riesco a leggere il contenuto delle singole celle dell'oggetto mediante 
la sintassi
objTree.view.getCellText(jRow,sColumnId)
e sarebbe molto utile per alcune funzioni di correzione poter anche 
cambiare il contenuto delle singole celle.
Ho cercato in lungo e in largo sulla rete (su Mozilla.org, con Google su 
NG italiani e non, e su tutto il Web), ma ho trovato solo un metodo 
setCellText(jRow,sColumnId,sCellText), che sembra non sortire alcun 
effetto (neanche un errore).
L'operazione sembra possibile in quanto il gestore della posta di 
Mozilla e di Netscape (appunto sviluppati in XUL) aggiornano la lista 
dei messaggi (o anche l'albero riepilogativo degli account di posta) 
*apparentemente* senza distruggere tutta la lista.
Qualcuno di voi ha gią avuto a che fare con un problema simile?
Č risolvibile o devo cercare di trovare un'altra soluzione per 
implementare la pagina che mi serve?
Ringrazio anticipatamente
Luca Pascali

 *apparentemente* senza distruggere tutta la lista.
Vi sono diversi workaround, cmq. Ma l'oggetto e' legato a qualche
datasource RDF? Come viene popolato?
In ogni caso, ti consiglio di sottoscrivere la mailing list italiana su
XUL: 
http://www.cfmentor.com/mailman/listinfo/xulex
-- 
C'ya,
  ZER0 :: coder.gfxer.webDesigner();
Tutti quelli che credono nella psicocinesi, per favore alzino la mia mano.

 
Ho un CGI che mi costruisce la pagina XML-XUL sul server e la invia al 
browser.
L'unica cosa che avevo intenzione di usare il javascript per modificare 
run-time il contenuto delle celle.
Grazie comunque per il link (mi iscrivero' immediatamente) e una 
curiosita': tu a suo tempo come avevi fatto?
Luca Pascali

 curiosita': tu a suo tempo come avevi fatto?
Agii direttamente sul DOM. Ma era piu' per "ruzzo" che per altro. All'epoca
stavo baloccandomi un po' con XUL per capirne logica, meccanismi, limiti e
potenzialita', ma senza neanche troppo impegno.
In sostanza il gioco e' questo. Recuperare il riferimento all'oggetto
treecell di cui vuoi modificare il testo, e poi impostare l'attributo label
con il nuovo valore.
L'unica cosa da capire, e' semplicemente la strada per recuperare tale
riferimento, ma quello dipende anche dalla struttura del codice generato, e
dal tipo di interfaccia.
Qiesto e' un test che ho fatto su un oggetto tree,senza livelli gerarchici,
tengo a precisare, quindi non so come si comporta in quel caso.
Molto spartanamente:
function setCellText(tree,rowIndex,columnIndex,textValue){
	var obj=tree.view.getItemAtIndex(rowIndex);
	if (obj && obj.firstChild && obj.firstChild.childNodes[columnIndex])
		obj.firstChild.childNodes[columnIndex].setAttribute("label",textValue);
 
}
Te l'ho scritto al volo, spero non vi siano errori di codice.
E' ampiamente migliorabile, ma e' giusto per indirizzarti su una strada.
-- 
C'ya,
  ZER0 :: coder.gfxer.webDesigner();
Corollario alla prima legge:
"Qualunque tipo di tecnologia aliena sopravviva ad un esplosione
nucleare, puo' essere distrutta da un virus informatico creato dal primo 
imbecille che si ritrova un portatile sottomano." (ZER0)

 
Ti ringrazio tantissimo.
Nel frattempo mi sono scaricato i sorgenti di Mozilla e ho visto che la 
funzione non e' stata assolutamente implementata.
In ogni caso, prendendo la funzione in CPP della getCellText, sono 
arrivato anch'io alla soluzione di manipolare l'albero DOM.
Non mi piace molto perche' la setCellText mi permetteva di ignorare 
l'effettiva sequenza delle colonne nella tabella, pero' per adesso in 
mancanza d'altro ....
Postero' in ogni caso un avviso sul bug traq di Mozilla per sapere se 
non altro il motivo per cui una funzione base e' implementata in un 
senso (get) e non nel suo opposto.
Anyway grazie ancora.
Luca
PS se il team di Mozilla dovesse inviarmi una risposta, mi faro' vivo.

Te l'ho scritto al volo, spero non vi siano errori di codice.
Non di codice, ma se hai un tree con all'interno:
   <treeitem id="ti2" container="true">
    <treechildren id="treechildren_inner">
     <treeitem id="treeitem_inner">
      <treerow id="treerow_inner">
       <treecell id="treerow_inner1" label="x"/>
       <treecell id="treerow_inner2" label="y"/>
      </treerow>
     </treeitem>
    </treechildren>
    <treerow id="tr2">
     <treecell id="tc2_1" label="2"/>
     <treecell id="tc2_2" label="bbbbbbbbb"/>
    </treerow>
   </treeitem>
firstChild non e' un treerow ma un treechildren e quindi non funziona.
L'object che cerchi e' firstChild.firstChild.firstChild non solo
firstChild. Teoricamente puoi verificare se e' settato
container="true", se non lo e' puoi usare il firstChild, altrimenti
devi controllare che non sia un treechildren e in caso affermativo
spostarti piu' in profondita' nel tree.
Un altro modo per gestire dati "variabili/modificabili" con elementi
XUL e' tramite datasource, ma il discorso cambia completamente, da un
certo punto di vista e' piu' semplice  :-)
'bye
P.S.
Sei riuscito a trovare della documentazione su XPCOM?

 PS se il team di Mozilla dovesse inviarmi una risposta, mi faro' vivo.
Danke.
-- 
C'ya,
  ZER0 :: coder.gfxer.webDesigner();
Le donne si dividono in 4 categorie: le suore (non la danno a nessuno);
le puttane (la danno a tutti); le stronze (la danno a tutti tranne che 
a te); le rompiballe (la danno a te e solo a te).

 Sei riuscito a trovare della documentazione su XPCOM?
Non ti e' arrivata la mail..? Ho scaricato il malloppone di 300 pagine su
come creare oggetti XPCOM, e sono partito da quello.. ma va un po' tutto a
rilento, purtroppo.. come al solito, il tempo non e' nostro amico.
-- 
C'ya,
  ZER0 :: coder.gfxer.webDesigner();
Come devo regolare la stampante laser per stordire?
(How do I set a laser printer to stun?)

rilento, purtroppo.. come al solito, il tempo non e' nostro amico.
Purtroppo 
'bye

fare l'override della stessa.
Potrebbe essere un XBL che "extends" l'elemento tree. Gia' alcuni
methods/properties dell'elemento sono implementate tramite binding e
quindi in JS, vedere in toolkit.jar, per il caso di tree,  il file
/content/global/bindings/tree.xml
'bye

 Potrebbe essere un XBL che "extends" l'elemento tree.
Certo, Neil ha fatto cosi' del resto.
A quel punto, fa prima ad utilizzare i suoi test.
-- 
C'ya,
  ZER0 :: coder.gfxer.webDesigner();
Deformazione professionale č:
Quando in ascensore senti la ragazza accanto che tira fuori il cellulare,
e ti volti per capire se e' un modello sul quale puoi sviluppare in J2ME.

 Non ancora.
Beh, considerando che te l'ho spedita da un bel po' direi che si e' persa.
Il portale di libero ultimamente fa un po' quel che gli pare.
-- 
C'ya,
  ZER0 :: coder.gfxer.webDesigner();
I feel like I'm diagonally parked in a parallel universe.