Tengo un problema con un tree en Xul que se encuentra en un sidebar. Necesito que se pueda borrar uno de los nodos utilizando un menú contextual con la opción borrar en uno de los menu items. He probado con estos dos codigos que he encontrado en la web pero no funcionan:
Código 1:
- Código: Seleccionar todo
function deleteCurrentNode(){
if (confirm("Are you sure you want to delete this node?") == true) {
var tree = document.getElementById("rm.sidebar.tree");
var currentelement = tree.treeBoxObject.view.getItemAtIndex(tree.currentIndex);
currentelement.parentNode.removeChild(currentelement);
}
}
Código 2: (este lo vi en este foro
)- Código: Seleccionar todo
function deleteCurrentNode(){
if (confirm("Are you sure you want to delete this node?") == true) {
var tree = document.getElementById("rm.sidebar.tree");
var treeCh = document.getElementById("rm.sidebar.treechildren");
var rows = treeCh.childNodes.length;
for (var j=rows-1 ; j>=0 ; j--)
{
if (tree.view.selection.isSelected(j))
{
treeCh.removeChild(treeCh.childNodes[j]);
}
}
}
}
En el codigo 2 me di cuenta que la variable rows es 0 por lo cual al llamar a la funcion nunca se ingresa en el lazo For.
Lo que indica que treechildren no tiene hijos, pero si los tiene, aunque se anaden al momento de mostrar el sidebar, pues la información del árbol proviene de un archivo xml, por lo que lo lleno al sobreescribir la función getCellText del view.
El codigo en Xul es el siguiente:
- Código: Seleccionar todo
<popupset>
<popup id="rm.sidebar.contextmenu">
<menuitem label="&rm.sidebar.tree.contextmenu.opentab.label;" oncommand="openTab();"/>
<menuseparator id="rm-sidebar-context-menu-separator"/>
<menuitem label="&rm.sidebar.tree.contextmenu.removenode.label;" oncommand="deleteCurrentNode();"/>
</popup>
</popupset>
- Código: Seleccionar todo
<tree id="rm.sidebar.tree" enableColumnDrag="true" hidecolumnpicker="true" flex="1" seltype="single" >
<treecols>
<treecol id="rm.sidebar.tree.col.title" label="&rm.sidebar.tree.col.title.label;" primary="true" flex="3"/>
<treecol id="rm.sidebar.tree.col.url.label" label="&rm.sidebar.tree.col.url.label;" flex="7"/>
</treecols>
<treechildren id="rm.sidebar.treechildren" contextmenu="rm.sidebar.contextmenu">
</treechildren>
</tree>
Ademas quisiera saber como puedo hacer para actualizar el arbol si el contenido de mi archivo Xml ha cambiado. Este archivo se actualiza cada cierto tiempo por lo que tendria que monitorear el archivo para cambiar la estructura del arbol, y tambien tendria que hacerlo en sentido contrario: monitorear el arbol para cambiar el contenido del archivo (esto, en el caso de borrar los nodos del arbol cuando ya resuelva ese problemita!!!). Yo creo que se puede utilizar un patron de diseno pero no estoy muy segura de como implementarlo en xul y javascript pues soy algo nueva en lo que es firefox.
De antemano, gracias!!




