Comunidad de diseño web y desarrollo en internet online

Regilla en flash con datos xml

Citar            
MensajeEscrito el 23 Mar 2009 09:58 am
Hola de nuevo .
Vuelvo a estar con otro problema ahora lo que busco es der unos datos en una regilla mas o menos parecido a esto http://www.cristalab.com/files/ejemplos/comp/datagrid/DataGrid.html Pero claro yo lo que quiero es que salga referencia, descripcion, precio e imagen como en el post de ofertas http://foros.cristalab.com/cargar-datos-xml-en-flash-as2-t70335/30.html pero claro una rejilla que cuando se selecione un articulo alga la ficha de dicho articulo ya tengo el codigo de la ficha aunque habria que retocarla pero no se como hacer lo de la regilla.
Alguien me puede ayudar???

Gracias, un saludo gente¡¡¡¡¡¡¡¡¡¡¡¡

Por rubensfh

38 de clabLevel



 

firefox
Citar            
MensajeEscrito el 23 Mar 2009 11:21 am

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 23 Mar 2009 12:04 pm
ok gracias pero ya lo tengo aunque me falta algun detalle mira pongo el as para ver donde esta el fayo:
Bueno primero os explico lo que necesitaria.
Queria poner una imagen dentro de un data grip que es donde esta la lista de articulos y que cuando se le de doble clic encima de un articulo que habra ese articulo desglosado, desglosado lo tengo ya la cuestion es unir los dos la lista y el desglosado http://foros.cristalab.com/cargar-datos-xml-en-flash-as2-t70335/30.html hay esta desglosado eso todo lo tengo en el fotograma 2. Y en el fotograma 1 tengo la lista.
Bueno en resumen seria:
1- ver la imagen en la lista.
2- selecionar un articulo y que me lo desglose.

Os dejo el codigo de la lista:

Código :

stop ();
import mx.controls.gridclasses.DataGridColumn;

//Cargamos el XML
ofertas = new XML();
ofertas.ignoreWhite = true;
ofertas.onLoad = function (success){
   if (success){
   //Creamos los arrays donde iran los datos
      largo = ofertas.firstChild.childNodes.length;
      articulo = new Array(largo);
      imagen = new Array(largo);
      descripcion = new Array(largo);
      precio = new Array(largo);
      
      //Llenar los arrays
      for (i=0; i<largo; i++){
         articulo[i] = ofertas.firstChild.childNodes[i].attributes.articulo;
         imagen[i] = ofertas.firstChild.childNodes[i].attributes.imagen;
         descripcion[i] = ofertas.firstChild.childNodes[i].attributes.descripcion;
         precio[i] = i;
      }
      
      llenarDataGrid();
   }
   else{
      trace("No se pudo cargar el XML");
   }
}
ofertas.load("OFERTAS-WEB.BUS");



Bueno espero respuesta un salñudo a todos¡¡¡¡¡¡¡¡¡¡

Por rubensfh

38 de clabLevel



 

firefox
Citar            
MensajeEscrito el 23 Mar 2009 12:56 pm
El array de los datos es uno solo, un dataprovider, al que le agregas objetos

Código ActionScript :

var misDatos:DataProvider = new DataProvider()
for (i=0; i<largo; i++){
       //lo de abajo va todo en una sola línea
        var item:Object = {articulo:ofertas.firstChild.childNodes[i].attributes.articulo,
         imagen:ofertas.firstChild.childNodes[i].attributes.imagen,
         descripcion:ofertas.firstChild.childNodes[i].attributes.descripcion,
         precio:i};
         misDatos.addItem(item)
      }

Luego asignas misDatos como dataprovider de tu datagrid

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 23 Mar 2009 01:14 pm
me dice que no se puede cargar DataProvider de todas formas para cual de los dos puntos es?

Por rubensfh

38 de clabLevel



 

firefox
Citar            
MensajeEscrito el 23 Mar 2009 01:31 pm
DataProvider es una clase de AS2, busca en la ayuda para ver su ruta y agregar el import, que se vería algo así:

import xxx.xxx.DataProvider (no recuerdo la ruta)

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 23 Mar 2009 01:46 pm
No te entiendo lo estoy haciendo en as2 pero me da ese error DataGrid en el inspector de componentes/esquema pone fieldname: dataProvider y data type: DataProvider pero no entiendo eso que me quieres decir y si lo pongo asi:

Código :

stop ();
import mx.controls.gridclasses.DataGridColumn;

//Cargamos el XML
ofertas = new XML();
ofertas.ignoreWhite = true;
ofertas.onLoad = function (success){
   if (success){
   //Creamos los arrays donde iran los datos
      largo = ofertas.firstChild.childNodes.length;
      referencia = new Array(largo);
      articulo = new Array(largo);
      descripcion = new Array(largo);
      precio = new Array(largo);
      
      //Llenar los arrays
      var misDatos:DataProvider = new DataProvider() 
        for (i=0; i<largo; i++){ 
       //lo de abajo va todo en una sola línea 
        var item:Object = {articulo:ofertas.firstChild.childNodes[i].attributes.articulo, 
         imagen:ofertas.firstChild.childNodes[i].attributes.imagen, 
         descripcion:ofertas.firstChild.childNodes[i].attributes.descripcion, 
         precio:i}; 
         misDatos.addItem(item) 
      } 
      
      llenarDataGrid();
   }
   else{
      trace("No se pudo cargar el XML");
   }
}
ofertas.load("OFERTAS-WEB.BUS");


me da un error en la linea:

Código :

var misDatos:DataProvider = new DataProvider() 

entonces no se que hacer.....
de todas formas para que es ese cambio para la imagen o para selecionar el articulo y que lo desglose?

Por rubensfh

38 de clabLevel



 

firefox
Citar            
MensajeEscrito el 23 Mar 2009 01:58 pm
Ok, he buscado la ruta en la ayuda

import mx.controls.listclasses.DataProvider

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 23 Mar 2009 02:22 pm
ok ahora no me da fallo pero no se para que sirve por que como he preguntado antes antes:

para que es ese cambio para la imagen o para selecionar el articulo y que lo desglose?

por que de lo que he comentado no hace nada ni se ve la imagen ni se visualiza el articulo que he selecionado, para que sirve eso?

Por rubensfh

38 de clabLevel



 

firefox
Citar            
MensajeEscrito el 23 Mar 2009 02:26 pm
Ok, entendí que no tenías toda tu data en el datagrid.
Para mostrar imágenes tienes que usar un Cellrenderer, el mas facilito es el htmlCellrenderer http://philflash.inway.fr/dghtmlrd/dghtmlrd.html

Para irte a la ficha (que tienes en otro fotograma) puedes capturar el click sobre la fila y capturar los datos, la ayuda explica como:

Código ActionScript :

// Create listener object.
var dgListener:Object = new Object();
dgListener.cellPress = function(evt_obj:Object) {
  trace("Artículo: "+my_dg.getItemAt(evt_obj.itemIndex).Articulo)
};
// Add listener.
my_dg.addEventListener("cellPress", listenerObject)


De la misma forma capturas el resto de las filas. También podrías hacerlo por databinding, explicado en el artículo que ya he posteado

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 23 Mar 2009 02:40 pm
bua ok lo veo un poco chungo pero bueno si me harias el favor de retocarme el codigo mas o menos yo te facilito los dos si los necesitas por que yo eso me lio estoy empezando con el as2 y algo me manejo pero tanto no lo de la imagen ya lo intento sacar pero lo de que selecione el articulo y valla a desplegarlo al fotograma que le diga no lo se hacer y claro que cargue los datos, yo habia pensado que cuando valla a desplegarlos que pida solo la linea o referencia de ese articulo y lo cargue, vamos no se es una idea.
Toma te paso el codigo para que por favor me lo retoques para el tema de cambiar de fotograma y ver los datos:

Código :

stop ();
import mx.controls.gridclasses.DataGridColumn;

//Cargamos el XML
ofertas = new XML();
ofertas.ignoreWhite = true;
ofertas.onLoad = function (success){
   if (success){
   //Creamos los arrays donde iran los datos
      largo = ofertas.firstChild.childNodes.length;
      referencia = new Array(largo);
      articulo = new Array(largo);
      descripcion = new Array(largo);
      precio = new Array(largo);
      
      //Llenar los arrays
      for (i=0; i<largo; i++){
         referencia[i] = ofertas.firstChild.childNodes[i].attributes.referencia;
         articulo[i] = ofertas.firstChild.childNodes[i].attributes.articulo;
         descripcion[i] = ofertas.firstChild.childNodes[i].attributes.descripcion;
         precio[i] = ofertas.firstChild.childNodes[i].attributes.precio;
      }
      
      llenarDataGrid();
   }
   else{
      trace("No se pudo cargar el XML");
   }
}
ofertas.load("OFERTAS-WEB.BUS");

Por rubensfh

38 de clabLevel



 

firefox
Citar            
MensajeEscrito el 23 Mar 2009 03:07 pm
Este código ya lo habías posteado en el primer mensaje.
Intenta con los bindings que puse en el primer artículo.
En cuanto a retocar tu código no hace falta, solo escribir lo que falta. Si quieres hacerlo tu, lo dicho, sigue el artículo, sino en cuanto tenga un rato vuelvo a escribirte lo que te falta ;)

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 24 Mar 2009 11:07 am
perdon por mi ignorancia pero no entiendo el que es lo que tengo que poner para que una vez que selecione el articulo que quiero ver me salga la ficha de dicho articulo con los datos correspondientes pasando al fotograma donde esta esa ficha, diandose del indice de la tabla y que lea otra vez los datos para componer toda la ficha.

Alguien me puede ayudar?
Un saludo¡¡¡¡¡¡¡¡¡¡

Por rubensfh

38 de clabLevel



 

firefox
Citar            
MensajeEscrito el 26 Mar 2009 02:02 am
Hola alguien me puede ayudar?

Por rubensfh

38 de clabLevel



 

firefox
Citar            
MensajeEscrito el 26 Mar 2009 07:29 am
Hola, aqui esta el codigo, ya bien estrucutrado, con errores coregidos y demas, como veras, no difiere mucho de lo que te explico solisarg, solo es cuestion de ingeniarselas.

Código ActionScript :

stop();

import mx.controls.gridclasses.DataGridColumn;
import mx.controls.DataGrid;

var pressed:Object;

//Cargamos el XML
ofertas = new XML();
ofertas.ignoreWhite = true;
ofertas.onLoad = function( success:Boolean ):Void
{
   if (success)
   {
      var misDatos:Array = new Array();
      for ( var i:Number = 0; i < this.firstChild.childNodes.length; i++)
      {
         var it:Object = this.firstChild.childNodes[i].attributes;
         misDatos.addItem({REF:it.referencia, Articulo:it.articulo, Descripcion:it.descripcion, Precio:it.precio, Imagen:it.imagen} );
      }
      CrearDataGrid( misDatos );
   }
   else
   {
      trace("No se pudo cargar el XML");
   }
}
ofertas.load("ofertas.xml");
/************* FUNCIONES ****************/
 
function CrearDataGrid( dp:Array ):DataGrid
{
   var dg:DataGrid = DataGrid( createClassObject(DataGrid, "misCeldas", 1, { _width:920, _height:410 }) );
   
   //Propiedades
   dg.editable = false;
   dg.headerHeight = 16;
   dg.resizableColumns = true;
   dg.selectable = true;
   dg.showHeaders = true;
   dg.sortableColumns = false;
   //Datos
   dg.dataProvider = dp;
   //Propiedades de las columnas
   dg.getColumnAt(0).width = 60;
   dg.getColumnAt(1).width = 200;
   dg.getColumnAt(2).width = 500;
   dg.getColumnAt(3).width = 80;
   dg.setPropertiesAt(i, {backgroundColor:0xFFFFFF});
   
   //Eventos
   dg.addEventListener("cellPress", this);
   
   return dg;
}


function cellPress( ev:Object )
{
   pressed = ev.target.getItemAt( ev.itemIndex );
   trace("__________________")
   for( var i in pressed )
      trace( i +":"+pressed[i] );

       //Aqui llamas al siguiente fotograma y ese fotograma hace lo necesario apartir de "pressed".
}

Por LongeVie

Claber

1741 de clabLevel

1 tutorial

Genero:Masculino  

En un lugar, re moto.

firefox
Citar            
MensajeEscrito el 26 Mar 2009 09:21 am
Hola, aqui la segunda parte del script, ahora con dar click a la grid, se abre una ventana que depliega todos los datos, necesitas tener una instancia de Window en la Biblioteca, tambien una instancia de TextArea y una instancia de un movieclip vacio vinculado para AS con id "algo". y Listo :D

Código ActionScript :

function cellPress( ev:Object )
{
   pressed = ev.target.getItemAt( ev.itemIndex );
   if( pressed )
   {
      var win = PopUpManager.createPopUp(this, Window, true, {closeButton:true, contentPath:"algo", title:"Producto"});
      win.addEventListener("click", this);
      win.addEventListener("complete", this);
   }
}
function click( ev:Object )
{
   ev.target.deletePopUp();
}
function complete( ev:Object) 
{
   crearFicha( ev.target.content );
   ev.target.setSize( ev.target.content._width + 5 , ev.target.content._height + 25);
   ev.target.move((Stage.width - ev.target.width)/2, (Stage.height - ev.target.height)/2 );   
}

function crearFicha( clip:MovieClip ):Void
{
   setArea( clip.createEmptyMovieClip("bg", 0), 550, 330 );   
   var wo:MovieClip = clip.createEmptyMovieClip("wo", 1);
   wo._y = wo._x = 5;

   var ld:MovieClipLoader = new MovieClipLoader();
   var ob:Object = new Object();
   ob.onLoadInit = function( t:MovieClip ){ t._width = 260; t._height = 290; };
   ld.addListener(ob);
   wo.createEmptyMovieClip("ld", 0);
   ld.loadClip("http://www.tres.com.uy/imagenes/productos/636.jpg", wo.ld);
   wo.ld._x = 265;
   wo.ld._y = 15;
   
   //Crear Componentes
   crearLabel( wo, 15, 15, "Articulo: " );
   crearLabel( wo, 60, 35, pressed.Articulo, 0x000000 );
   crearLabel( wo, 15, 55, "Precio:" );
   crearLabel( wo, 60, 70, pressed.Precio, 0x000000 );
   crearLabel( wo, 15, 90, "Descripcion:" );
   wo.createClassObject( TextArea, "descripcion_txa", wo.getNextHighestDepth(), {_x:15, _y:105, _width:230, _height:200});
   wo.descripcion_txa.text = pressed.Descripcion;
}

function crearLabel( clip:MovieClip, x:Number, y:Number, text:String, color:Number ):TextField
{
   var l:Number = clip.getNextHighestDepth();
   clip = clip.createEmptyMovieClip("c"+l, l);
   clip._x = x;
   clip._y = y;   
   var texto:TextField = clip.createTextField("tx", 0, 0, -11, 200, 22);
   texto.wordWrap = true;
   texto.multiline = true;
   texto.text = text;
   //Formato de texto
   texto.setTextFormat( new TextFormat("Arial", 12, color?color:0x0000AA, color?false:true) )
   return texto;
}

function setArea( clip:MovieClip, w:Number, h:Number, color:Number, alpha:Number ):Void
{
   //Dibujamos un cuadrado
   clip.clear();
   clip.beginFill( color?color:0, alpha?alpha:0 );
   clip.moveTo( 0, 0 );
   clip.lineTo( w, 0 );
   clip.lineTo( w, h );
   clip.lineTo( 0, h );
   clip.endFill();   
}

Por LongeVie

Claber

1741 de clabLevel

1 tutorial

Genero:Masculino  

En un lugar, re moto.

firefox
Citar            
MensajeEscrito el 26 Mar 2009 09:22 am
huy, se me olvidaba, los imports ahora cambian por estos:

Código ActionScript :

import mx.managers.PopUpManager;
import mx.containers.Window;
import mx.controls.DataGrid;
import mx.controls.TextArea;

Por LongeVie

Claber

1741 de clabLevel

1 tutorial

Genero:Masculino  

En un lugar, re moto.

firefox
Citar            
MensajeEscrito el 26 Mar 2009 11:10 am
jeje, ya estaba tardando :)

Ya sabes ruben, si es para que te escriban el code, ve directamente al maestro Longevie o Eliseo2

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 26 Mar 2009 12:08 pm
el codigo al dar al articulo me faya se que linea es es esta:

Código :

crearFicha( ev.target.content );
   ev.target.setSize( ev.target.content._width + 5 , ev.target.content._height + 25);   
   ev.target.move((Stage.width-ev.target.width)/2,(Stage.height-ev.target.height)/2);


me faya justo hay lo se por que es cuando coje la escala de la pantalla pero es que resulta que en la index ya tengo la escala configurada y por eso no funciona, el codigo de la index tiene que ser este :

Código :

stop ();
Stage.align = "TL";
Stage.scaleMode = "noScale";
var miListener:Object = new Object();
miListener.onResize = function() {
   barra1._width = Stage.width;
   fondo._width = Stage.width;
   fondo._height = Stage.height;
   mov_tw(todo,"_x",Stage.width/2);
   mov_tw(todo,"_y",(Stage.height/2));
};
Stage.addListener(miListener);
miListener.onResize();


entoncees del codigo primero que es lo que tendria que ajustar? por que he intentado de todo pero no se que hacer mas.

Alguien me puede ayudar?
solisarg?
LongeVie?
Gracias, un saludo¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡

Por rubensfh

38 de clabLevel



 

firefox
Citar            
MensajeEscrito el 26 Mar 2009 07:46 pm

solisarg escribió:

jeje, ya estaba tardando :)

Ya sabes ruben, si es para que te escriban el code, ve directamente al maestro Longevie o Eliseo2

Jorge


:P no es tan asi como parece :P no me vayan a estar pidiendo codigos.


rubensfh, ese codigo esta diseñado para que la ventanita se cree en el centro de la pantalla, tenga las dimesiones que tenga, tu puedes cambiarlo por las coordenadas que quieras.

Código ActionScript :

ev.target.move(100,100);


Suerte.

Por LongeVie

Claber

1741 de clabLevel

1 tutorial

Genero:Masculino  

En un lugar, re moto.

firefox

 

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