Comunidad de diseño web y desarrollo en internet online

información del drop en un tree

Citar            
MensajeEscrito el 26 May 2009 06:28 pm
Buenas tardes!
Los controles tree me están dando problemas, no sé si están mal diseñados o soy yo que no he entendido algo.

Ahora estoy haciendo drag&drop dentro de un árbol para mover elementos. El evento dragDrop me da toda la información que quiera sobre el elemento que se ha movido, pero de dónde va a caer no tengo ni idea. He probado de mil formas.

Lo único que veo esperanzador es el método calculateDropIndex del control tree, pero no me vale, porque con eso sé en qué posición ha quedado dentro del tree, pero no a qué nivel. Es decir, que no sé si el que está justo encima es su padre, su hermano o es el hijo de otro (ya me entendeis).

¿Alguien me puede sacar del pozo?

Por pumy

5 de clabLevel



 

firefox
Citar            
MensajeEscrito el 28 May 2009 01:20 pm
Hola, he hecho una aproximación, pero no es suficiente. De todas formas creo que ya estoy cerca.

Con el resultado de calculatedropindex he intentado seleccionar el item y averiguar cuál es su padre mediante el método getparent del tree. Esto tiene un problema, como los eventos dragdrop saltan antes de que se complete el movimiento, la carpeta que selecciono es la que ocupaba antes ese puesto y me la mueve. Eso no está bien.

Lo que necesito es que me salte un evento después de terminar de mover la carpeta y entonces seleccionar el elemento y hacer lo que quiera. ¿A alguien se le ocurre como hacerlo?

Gracias!

Por pumy

5 de clabLevel



 

firefox
Citar            
MensajeEscrito el 28 May 2009 02:48 pm
Conseguido.

Lo posteo por si alguien lo necesita.

El evento dragComplete lo lanza el control que inició el drag and drop (como en este caso es el mismo tree nos da lo mismo) después de que todo haya terminado.

La primera dificultad es que aquí no teníamos información del índice donde ha caído el bicho. Para solucionarlo lo he obtenido en el manejador del dragDrop y lo he guardado en una variable global.

Otra dificultad. Cuando en el dragComplete vas a mirar qué hay en ese índice hay veces que no es el elemento que esperabas. Esto sucede porque al mover un elemento a una posición inferior a la que tenía, ese mismo elemento deja un espacio libre, con lo cual la posición que ocupa al final es una menos de lo que esperábamos. Por si fuera poco, si el elemento es una carpeta con hijos y está abierta, las posiciones que se restan son más. En todo caso el índice final será siempre igual o menor que el esperado.

Usando un campo numérico que identifica a mis nodos he hecho lo siguiente en la rutina de dragComplete:

Código :

private function dragCompleteHandler(event:DragEvent):void
{
    miArbol.selectedIndex=indiceEstimado;
    while(miArbol.selectedItem.numero!=numeroMovido)
    {
        indiceEstimado--;
        miArbol.selectedIndex=indiceEstimado;
    }
    //aquí ya hago lo que quiera con el item seleccionado
}


Para ello antes he tenido que almacenar el índice estimado inicial y el número identificativo del elemento movido en la rutina de dragDrop:

Código :

var indiceEstimado:Number=0;
var numeroMovido:Number=0;

private function dragDropHandler(event:DragEvent):void
{
    var Arrastrados:Object=event.dragSource.dataForFormat("treeItems");
    numeroMovido=Arrastrados[0].numero;
    indiceEstimado=miArbol.calculateDropIndex(event);
}

Por pumy

5 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.