Flex, Drag & Drop explicó.


En este tutorial se explica cómo utilizar los métodos Drag & Drop en Flex. En muchos de los artículos y componentes de flex, estas propiedades ya están ejecutados y su uso es muy sencillo en aquellos componentes con soporte nativo Drag & Drop.
Las cosas pueden llegar un poco más complicado si trabajamos juntos con otros componentes, pero este no será el caso. El tutorial a continuación pasar a explicar cómo realizar un Drag & Drop y componentes entre los que tienen el apoyo nativo de drag & drop, podemos elegir uno de los siguientes:

DataGrid
Lista
HorizontalList
PrintDatagGrid
TileList
Árbol

Vamos a utilizar dos DataGrid, y hacer un ejemplo de un sencillo sistema de carrito de la compra, la creación de un nuevo proyecto y colocar el siguiente código:

<? Xml " 1.0 " version = "1.0" " utf-8 " ?> encoding = "UTF-8">
<Mx: Aplicación " http://www.adobe.com/2006/mxml " xmlns: mx = "http://www.adobe.com/2006/mxml" " absolute " layout = "absoluta" " 510 " width = "510" " 349 " height = "349" " [1.0, 1.0] " backgroundGradientAlphas = [1,0, 1,0] " " [#FFFFFF, #FFFFFF] " > backgroundGradientColors = [# FFFFFF, # FFFFFF] ">

<Mx: DataGrid " mercado " id = "mercado" " 37 " x = "37" " 86 " y = "86" " 204 " width = "204" " 142 " height = "142" " [#F6F0F0, #FFFFFF] " > alternatingItemColors = [F6F0F0 #, # FFFFFF] ">
<Mx: Columns>
<Mx: DataGridColumn " Objeto " headerText = "Objeto" " objeto " /> de datos = "objeto" />
<Mx: DataGridColumn " Preço " headerText = "Precio" " preco " /> de datos = "precio" />
</ Mx: columnas>
<Mx: DataProvider>
<Mx: Objeto " Livro A " objeto = "El Libro" " 25 € " /> Precio = "25 €" />
<Mx: Objeto " Livro B " objeto = "B" Libro " 30 € " /> Precio = "30 €" />
<Mx: Objeto " Errata LA " objeto = "LA erratas" " 15 € " /> Precio = "15 €" />
</ Mx: dataProvider>
</ Mx: DataGrid>

<Mx: DataGrid " carrinho " id = "carrito" " 276 " x ='276 ' " 86 " > y = "86">
<Mx: Columns>
<Mx: DataGridColumn " Objeto " headerText = "Objeto" " objeto " /> de datos = "objeto" />
<Mx: DataGridColumn " Preço " headerText = "Precio" " preco " /> de datos = "precio" />
</ Mx: columnas>
</ Mx: DataGrid>
<Mx: Etiqueta " 37 " x = "37" " 60 " y = "60" " Mercado " text = "Mercado" " 140 " /> width = "140" />
<Mx: Etiqueta " 276 " x ='276 ' " 60 " y = "60" " Carrinho de compras " text = "carrito de la compra" " 140 " /> width = "140" />
</ Mx: Aplicación>

En que muy posiblemente sea con el diseño gráfico de la imagen:

Parte 1

Parte 1


Nuestro objetivo es pasar DataGrid elementos de "mercado" para datarid "carrito de la compra" para utilizar los métodos que puede arrastrar y soltar desde el mismo nativo del DataGrid, pero para los que tenemos que hacer algunos cambios en el código, lo que indica que prestará apoyo a estas operaciones. Vamos a cambiar el DataGrid la izquierda (de mercado) para este dragEnabled añadiendo el parámetro y establecer como verdad.:

<Mx: DataGrid " mercado " id = "mercado" " 37 " x = "37" " 86 " y = "86" " 204 " width = "204" " 142 " height = "142" " [#F6F0F0, #FFFFFF] " alternatingItemColors = [F6F0F0 #, # FFFFFF] " " true " > dragEnabled = "true">

y haciendo lo mismo en DataGrid a la derecha, pero con el parámetro dropEnabled:

<Mx: DataGrid " carrinho " id = "carrito" " 276 " x ='276 ' " 86 " y = "86" " true " > dropEnabled = "true">

y listo, nuestro datagrids están listos para enviar y recibir artículos, y se pueden guardar y ejecutar las aplicaciones que tendrá el drag & drop en los negocios.

El funcionamiento del drag & drop en los componentes que ya cuentan con su apoyo es tan simple como se ha explicado, pero ahora vamos a hacer algo más elaborado, utilizando el mismo código. Vamos a poner una papelera en nuestra disposición por el poder-MOS eliminar elementos de nuestro carrito de la compra. Para hacerlo, después de la última lugar el texto siguiente:

<Mx: Imagen " 219.5 " x = "219,5" " 256 " y = "256" " http://www.msdevstudio.com/mywork/recicle.png " source = "http://www.msdevstudio.com/mywork/recicle.png" " false " maintainAspectRatio = "false" " 76 " width = "76" " 73 " height = "73" " lixeira " id = "basura" />

y tenemos algo muy similar al siguiente:

Parte 2

Parte 2

Dado que una imagen no está soportado nativamente tienen el drag & drop, tenemos que encontrar una manera de hacerlo. En primer lugar tenemos que indicar a los DataGrid que también pueden ser objeto de arrastre, y también permitirá seleccionar varias líneas al mismo tiempo, ya que añadirá en el DataGrid "cesta" 3 parámetros tales como dragEnabled = "true", la allowMultipleSelection = "true" y dragMoveEnabled = "true" conseguir nuestro DataGrid como este:

<Mx: DataGrid " carrinho " id = "carrito" " 276 " x ='276 ' " 86 " y = "86" " true " dropEnabled = "true" " true " dragEnabled = "true" " true " allowMultipleSelection = "true" " true " > dragMoveEnabled = "true">

Con estos parámetros indican que estoy DataGrid (además del ya aceptar gota) es también aceptar arrastrar y muiltipla selección de temas y cuando el drag & drop esta DataGrid a otro objetivo, que permitirá su contenido seleccionado no se mueve y copiar como lo era antes ...

Si usted busca en los parámetros de la etiqueta mx: Arrastre la imagen hay algunos elementos que nos puede permitir hacer que el sujeto trata de dargar & drop, y es precisamente una de las propiedades que usamos, la escritura de la etiqueta la imagen de nuestra basura, los siguientes :
DragEnter = "lidaEnter (event)"

obtener la etiqueta mx: imagen como esta:

<Mx: Imagen " 219.5 " x = "219,5" " 256 " y = "256" " http://www.msdevstudio.com/mywork/recicle.png " source = "http://www.msdevstudio.com/mywork/recicle.png" " false " maintainAspectRatio = "false" " 76 " width = "76" " 73 " height = "73" " lixeira " id = "basura" " lidaEnter(event) " DragEnter = "lidaEnter (event)" />

Estos dos parámetros son DragDrop DragEnter y eventos que se activan cuando el objeto es un objetivo de arrastrar y soltar operaciones, en este caso la función lidaEnter () se llama cuando un objeto blanco para arrastrar pasar en la parte superior de nuestra imagen, aquí tenemos que darle a flex es capaz de arrastrar.

Todo lo que queda es la creación de la función para manejar este caso, específicamente la lidaEnter () para poner el código siguiente después de la 2-línea (después de la etiqueta mx: aplicación):

: Script > <Mx: Script>
CDATA [ <! [CDATA [
importación events . DragEvent ; mx. acontecimientos. DragEvent;
importación managers . DragManager ; mx. directivos. DragManager;

privado función event : DragEvent ) : void { lidaEnter (event: DragEvent): void (
var Image = event . currentTarget dropTarget: Imagen = evento. currentTarget el Imagen;
acceptDragDrop ( dropTarget ) ; DragManager. AcceptDragDrop (dropTarget);
showFeedback ( DragManager . MOVE ) ; DragManager. ShowFeedback (DragManager. movimiento ");
)


]]>
mx:Script> </ Mx: Script>

Y listo, tenemos el mercado con nuestro carrito de la compra y la basura descalificado por uno o más artículos de la cesta de la compra.

¿Cómo se puede reparar no tienen dificultad, por lo tanto, yo uso y el abuso!

Final de código:

Descarga: testDragDrop.mxml
<? Xml " 1.0 " version = "1.0" " utf-8 " ?> encoding = "UTF-8">
<Mx: Aplicación " http://www.adobe.com/2006/mxml " xmlns: mx = "http://www.adobe.com/2006/mxml" " absolute " layout = "absoluta" " 510 " width = "510" " 349 " height = "349" " [1.0, 1.0] " backgroundGradientAlphas = [1,0, 1,0] " " [#FFFFFF, #FFFFFF] " > backgroundGradientColors = [# FFFFFF, # FFFFFF] ">
<Mx: Script>
<! [CDATA [
mx.events.DragEvent importación;
mx.managers.DragManager importación;

lidaEnter private function (event: DragEvent): void (
var dropTarget: Imagen = event.currentTarget la imagen;
DragManager.acceptDragDrop (dropTarget);
DragManager.showFeedback (DragManager.MOVE);
)


]]>
</ Mx: Script>

<Mx: DataGrid " mercado " id = "mercado" " 37 " x = "37" " 86 " y = "86" " 204 " width = "204" " 142 " height = "142" " [#F6F0F0, #FFFFFF] " alternatingItemColors = [F6F0F0 #, # FFFFFF] " " true " > dragEnabled = "true">
<Mx: Columns>
<Mx: DataGridColumn " Objeto " headerText = "Objeto" " objeto " /> de datos = "objeto" />
<Mx: DataGridColumn " Preço " headerText = "Precio" " preco " /> de datos = "precio" />
</ Mx: columnas>
<Mx: DataProvider>
<Mx: Objeto " Livro A " objeto = "El Libro" " 25 € " /> Precio = "25 €" />
<Mx: Objeto " Livro B " objeto = "B" Libro " 30 € " /> Precio = "30 €" />
<Mx: Objeto " Errata LA " objeto = "LA erratas" " 15 € " /> Precio = "15 €" />
</ Mx: dataProvider>
</ Mx: DataGrid>

<Mx: DataGrid " carrinho " id = "carrito" " 276 " x ='276 ' " 86 " y = "86" " true " dropEnabled = "true" " true " dragEnabled = "true" " true " allowMultipleSelection = "true" " true " > dragMoveEnabled = "true">
<Mx: Columns>
<Mx: DataGridColumn " Objeto " headerText = "Objeto" " objeto " /> de datos = "objeto" />
<Mx: DataGridColumn " Preço " headerText = "Precio" " preco " /> de datos = "precio" />
</ Mx: columnas>
</ Mx: DataGrid>
<Mx: Etiqueta " 37 " x = "37" " 60 " y = "60" " Mercado " text = "Mercado" " 140 " /> width = "140" />
<Mx: Etiqueta " 276 " x ='276 ' " 60 " y = "60" " Carrinho de compras " text = "carrito de la compra" " 140 " /> width = "140" />
<Mx: Imagen " 219.5 " x = "219,5" " 256 " y = "256" " http://www.msdevstudio.com/mywork/recicle.png " source = "http://www.msdevstudio.com/mywork/recicle.png" " false " maintainAspectRatio = "false" " 76 " width = "76" " 73 " height = "73" " lixeira " id = "basura" " lidaEnter(event) " DragEnter = "lidaEnter (event)" />
</ Mx: Aplicación>
Descarga: testDragDrop.mxml

Pueden ver el resultado final en línea con código fuente disponible aquí

Abrazo y espero que sea útil y esclarecedor.

la versión en formato pdf disponible temporalmente.
Dejar un comentario o una Trackback

13 Comentarios

  1. George
    9 de agosto de 2008 a las 2:30 pm | Permalink

    Gracias Mario!
    Hombre, yo estaba buscando este desde hace mucho tiempo! Y no había encontrado nada agradable.

    Felicitaciones por su tutoriales y la iniciativa para ayudar a mantener así!

  2. 9 de agosto de 2008 a 5:13 pm | Permalink

    Oupa George, a pesar de que ayudó a ...

    Gracias ..

    Abrazar.

  3. 13 de agosto de 2008 a 8:40 pm | Permalink

    Muy bonito, me gustó el artículo, me dio una idea a la pantalla lo que yo estaba haciendo en flex, solo que no pude terminar, si mi problema y que las columnas de otra red (drop) labelfunctin son por necesidad y no de datos en este Si no funciona, usted tiene algunos consejos?

  4. 14 de agosto de 2008 a las 9:40 am | Permalink

    Janderson bueno, pero usar una labelFunction para que? así nunca probado (pero debería funcionar), pero creo que en lugar de la etiqueta función puede utilizar un procesador tema que debería funcionar ... pero explicar mejor cuál es su función de la etiqueta, y si es sólo en DataGrid o también en cada columna ...

    Para optimizar el contenido de su grilla (caída) puede utilizar el DragDrop = "función (caso)" para optimizar su contenido ...

    véase:
    http://blog.flexmonkeypatches.com/2008/03/24/nested-item-renderers-with-scrollbars-and-drag-and-drop-enabled-scroll-dont-drag-please/

    y el mejor ejemplo:
    http://www.adobe.com/devnet/flex/quickstart/adding_drag_and_drop/

    Trate de explicar un poco mejor ...

    Abrazar.

  5. 14 de agosto de 2008 a horas 12:27 pm | Permalink

    Mario, VLW de atención, abrir un foro sobre el tema de la flexbrasil, creo que explica mejor lo que necesito.

    http://forum.flexbrasil.com.br/viewtopic.php?f=4&t=532

    la pantalla es la siguiente, costes de formación, cuando el hombre arrastrando una tabla de precios para la red es donde el precio del producto, voy a escribir en el banco que la lista de precios de este producto y, a continuación, la lista ya la mesa con el El valor sugerido de venta. más de esto, tengo que comprobar si la mesa ya no estaba registrado, por ejemplo, ¿por qué debe "interceptar" el evento, para hacer algunas comprobaciones y cálculos.

    VLW.

  6. 14 de agosto de 2008 a horas 12:31 pm | Permalink

    ah! VLW y por los enlaces, voy a examinar el tema Reder y analizar cómo funciona, gracias

  7. Brian
    16 de agosto de 2008 a horas 11:55 pm | Permalink

    Gracias por compartir sus conocimientos de forma gratuita, es muy útil.
    Sólo tengo una pregunta, ¿hay alguna manera de hacer que funcione en Opera?
    Una vez más, gracias.

  8. 17 de agosto de 2008 a 6:38 pm | Permalink

    Hola Brian, no funciona en Opera? esto es muy extraño ... Yo no soy consciente de este problema ... pero es sólo problema en este caso? o han tenido problemas en el flex antes?

    Recuerdos.

  9. Agosto 19, 2008 10:30 PM | Enlace permanente

    Hola, Mario. Haciendo que su ejemplo ha problema en Opera, pero en otros navegadores funciona normalmente. Así que refiz (sin copiar el código, pero haciendo la misma cosa) y ha trabajado perfectamente en todos los navegadores, con un pequeño detalle: Si, por ejemplo, copia de la carpeta donde se ha guardado el archivo y pasar a otro equipo, o incluso pegarlo en otro directorio en mi equipo, empezando a ser un problema. El arrastrar y soltar entre la cesta de mercado y obras, pero para tratar de arrastrar el carro de la basura, simplemente no. Esto ocurre en todos los navegadores, Exeter en Internet Explorer.

    Otro problema, fuera del contexto, con Opera'm no pueden dejar comentarios aquí.

    Gracias por su atención, continuar la gran labor.

  10. 20 de agosto de 2008 a 6:41 am | Permalink

    Brian Bueno, permítanme abrir boca, nunca había pasado por una cosa así ... pero da un error?

    En cuanto a las observaciones, pueden no tener habilitado JavaScript en Opera, debido a la necesidad de dejar comentarios a javascript permitido a correr ...

    Abrazar.

  11. 20 de agosto de 2008 a 1:43 pm | Permalink

    No, no hay errores, pero para arrastrar el carro de la basura devuelve el tema a la cesta, como si la basura no se permitirá a recibirla.

    Lo comprobé y habilitar JavaScript en Opera, realmente extraño.
    Aún así, gracias por tu ayuda.
    Abrazar.

  12. 20 de agosto de 2008 a las 3:45 pm | Permalink

    Lo hice, con ayuda averiguar lo que estaba sucediendo. Yo había dejado la basura estático, añadió que para incrustar y trabajado. Errores de novato ...
    Gracias por su atención.

  13. 20 de agosto de 2008 a 4:44 pm | Permalink

    Hmm ... mi ejemplo se utiliza la papelera sin ser incrustar ... raro, pero que aún funciona bien .. :)

    Abrazar.

Déjanos tu comentario

Su dirección de correo electrónico nunca es publicado o compartido. Los campos obligatorios están marcados con un *