Comunidad de diseño web y desarrollo en internet online

Crear objetos dinamicamente

Citar            
MensajeEscrito el 09 Nov 2009 09:27 pm
Hola, tengo el siguiente problema.
Tengo un grafico, con 2 series ya definidas. Quiero agregar 2 series de forma dinamica, en donde para cada una de ellas, tengo definido un arreglo que sera el data provider de la serie. El problema, es que a la hora de ver el gráfico, solo aparecen los datos correspondientes a las series ya definidas, pero no las que creo dinamicamente. Probé crear las series, sin el for, declarando todas las componentes de la serie, y si funciona, pero es a la hora de hacerlo de forma dinamica cuando no funcion. Espero alguien pueda ayudarme. Ahí va un el código. Muchas Gracias.

private var expensesAC1:ArrayCollection = new ArrayCollection( [
{ Month: 0, data1: 0},
{ Month: 150, data1: 1900},
{ Month: 250, data1: 0},
{ Month: 350, data1: 1400 },
{ Month: 550, data1: 0},
{ Month: 650, data1: 775},
{ Month: 950, data1: 0} ]);

[Bindable]
private var expensesAC0:ArrayCollection = new ArrayCollection( [
{ Month: 0, data0: 0},
{ Month: 450, data0: 2200},
{ Month: 550, data0: 0},
{ Month: 650, data0: 1500 },
{ Month: 750, data0: 0},
{ Month: 850, data0: 975},
{ Month: 950, data0: 0} ]);

public function graficar():void{

var i:int;
var currentseries:Array;
var nuevaserie:AreaSeries;
for(i=0;i<2;i++){

nuevaserie = new AreaSeries();
nuevaserie.name="nuevaserie"+i;
nuevaserie.dataProvider="expensesAC"+i;
nuevaserie.yField="data"+i;
nuevaserie.xField="Month";

//estos solo son datos para el estilo
nuevaserie.displayName="funciona"+i;
nuevaserie.setStyle("areaStroke",s3);
nuevaserie.setStyle("areaFill",sc3);
nuevaserie.setStyle("form","step");
addChild(nuevaserie);

currentseries= new Array;
currentseries=Areachart.series;
currentseries.push(nuevaserie);
Areachart.series=currentseries;
abrirg.selected=true; //este boton abre el grafico
}
}

Por juanxo84

1 de clabLevel



 

firefox
Citar            
MensajeEscrito el 10 Nov 2009 02:22 pm
Me he dado cuenta que el problema ocurre cuando a la Serie que estoy creando, le asigno el dataProvider, en la sigueinte linea:

nuevaserie.dataProvider="expensesAC"+i;

Alguna sugerencia?

Por juanxo84

1 de clabLevel



 

firefox
Citar            
MensajeEscrito el 10 Nov 2009 03:23 pm
Supongo que te estará cogiendo el dataProvider como un simple string y no como el arrayCollection que tienes declarado arriba, por eso te dará error.

Si le pones al dataProvider expensesAC1 si que te funciona no?

Por ur!

256 de clabLevel



 

Barcelona

chrome
Citar            
MensajeEscrito el 10 Nov 2009 03:31 pm
Exacto, si pongo
if(i==0)
nuevaserie.dataProvider = expensesAC0;
if(i==1)
nuevaserie.dataProvider = expensesAC1;

funciona ok.

pero lo que debo hacer, es obtener unos datos desde una base de datos, y de acuerdo a la cantidad de datos, generar los dataproviders, para las series a crear.
Bueno te explico un poco, hago un http request a un archivo php, que obtiene datos de una base de datos y los filtra de acuerdo a ciertos criterios, y el php retorna un un string formateado como xml. Por lo que creo que la mejor solucion seria que el php me retorne los valores ya formateados para crear los ArrayColeection.
luego en AS haria algo como

var dataproviders:ArrayCollection=evento.result

y luego a cada nuevaserie

nuevaserie.dataprovider=dataproviders[i]

que opinas??

Por juanxo84

1 de clabLevel



 

firefox
Citar            
MensajeEscrito el 10 Nov 2009 06:56 pm
Si almacenas esos ArrayCollection de manera que pongas:

Código ActionScript :

var data:Array=new Array();

data.push(expensesA0);
data.push(expensesA1);

//Accesarias asi (obvio i es un contador de for o algo asi :P

nuevaserie.dataProvider = data[i];

Por Angel Roberto

Claber

248 de clabLevel



 

firefox
Citar            
MensajeEscrito el 26 Mar 2011 07:08 pm
Es un tema viejo, pero para aquél que tenga la duda puede utilizarlo de esta manera:

nuevaserie.dataProvider=this["expensesAC"+i];

para utilizar un array creado dentro de la clase como dataprovider.

Saludos!

Por mramirezc84

1 de clabLevel



 

firefox

 

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