PDA

Volledige versie bekijken : LoadVars globaal gebruiken


BlackCoder
%Europe/Berlin %988 %2008, 00:43
Beste lezers,

Ik heb een vraag omtrent het inlezen van variabelen. Dit is mijn script:

lv = new LoadVars();
lv.onLoad = onLoadCallBack;
lv.load("http://www.digitics.nl/getData.php");
function onLoadCallBack(succes)
{
if(succes)
{
trace(this.objects);
}
else
{
trace("Loading Error!!");
}
}
this.createTextField("textbox1", 1, 100, 100, 100, 100);
textbox1.text = this.objects;
textbox1.border = true;

Het output scherm geeft, middels trace, netjes de waarde van 'objects', maar de textbox geeft "undefined" alsof de variabelen buiten de functie niet bruikbaar zijn. Hoe kan ik ervoor zorgen dat de variabelen overal bruikbaar zijn binnen AS?

Hetzelfde principe is me wel gelukt door gebruik te maken van flashvars in de <param> tag, maar ik zou graag willen dat mijn variabelen niet leesbaar zijn de HTML code.

Is loadVariablesNum een betere optie? Hiermee kan ik de variabelen tevens niet gebruiken binnen AS, maar wel op de scene.

Alvast bedankt voor de hulp!

Vriendelijke groet,

- Roy

Jan
%Europe/Berlin %001 %2008, 01:02
Eerst en vooral bestaat this.objects niet op je hoofdtijdlijn/_root scope.
objects is namelijk een variabele binnen je LoadVars object en die zou je buiten die scope moeten opvragen via lv.objects

Maar je probeert nu een tekstveld te vullen met de inhoud van een variabele op een moment dat die variabele nog niet gevuld is/bestaat.

lv.objects heeft pas een inhoud NA de onLoad.
Het is niet omdat die regel textbox1.text = this.objects; NA de lv.load() regel staat dat Flash gaat wachten met het uitvoeren ervan totdat het onLoad event heeft plaatsgevonden.
Dus:
tekstveld vullen IN de onLoad:
this.createTextField("textbox1", 1, 100, 100, 100, 100);
textbox1.border = true;
lv = new LoadVars();
lv.onLoad = onLoadCallBack;
lv.load("http://www.digitics.nl/getData.php");
function onLoadCallBack(succes)
{
if(succes)
{
trace(this.objects);
textbox1.text = this.objects;
}
else
{
trace("Loading Error!!");
}
}

En zeker geen loadVariablesNum gebruiken. (Is hopeloos verouderd en nogal onhandig in gebruik) LoadVars is the way to go. :)

Groeten,
http://users.telenet.be/jansurf/cwo.png Jan

PS: Gebruik ook even de juiste tags rond je script op het forum. ;)
http://img175.imageshack.us/img175/3632/forumtagsae7.jpg

BlackCoder
%Europe/Berlin %930 %2008, 23:20
Beste Jan en andere lezers,

Bedankt voor het antwoord; je verhaal is me echter nog niet geheel duidelijk.

Hoe zou ik bijvoorbeeld de variabelen kunnen gebruiken voor het genereren van textboxes.

Hier is mijn code welke ik gebruik met flashvars en wil converteren voor gebruik met LoadVars.

var x_image:Number = 0;
var x_text:Number = 180;
var depth:Number = 1;
var i:Number = 1;

while (i <= objects)
{
//displays the name of a project
this.createTextField(["my_name"+i], depth, x_text, 100, 100, 100);
this["my_name"+i].text = this["project"+i+"name"];
this["my_name"+i].border = true;
//displays the image of a project
depth++;
this.createObject("Loader", ["loader"+i], depth);
this["loader"+i]._x = x_image;
this["loader"+i].scaleContent = false;
this["loader"+i].contentPath = ["images/test"+i+".jpg"];
//set variables for next loop
x_image = x_image + 500;
x_text = x_text + 500;
depth++;
i++;
}

stop();

Ik kom overigens in Flash met een PHP achtergrond; wellicht dat mijn denkwijze om dit te realiseren niet de juiste aanpak is?

Alvast bedankt!

- Roy

Jan
%Europe/Berlin %006 %2008, 01:09
stop();
var lv:LoadVars = new LoadVars();
lv.load("http://www.digitics.nl/getData.php");
lv.onLoad = function(succes:Boolean)
{
if(succes)
{
for (var i in this)
{
trace("lv." + i + " = " + this[i]);
}
createTextFields(Number(this.objects));
}
else
{
trace("Loading Error!!");
}
}

function createTextFields(total:Number)
{
for(var i:Number=1; i<=total; i++)
{
//displays the name of a project
var tf:TextField=this.createTextField("my_name"+i, this.getNextHighestDepth(), (i-1)*500, 100, 100, 100);
tf.text = lv["project" + i + "name"];
tf.border = true;
//displays the image of a project
var obj = this.createObject("Loader", "loader"+i, this.getNextHighestDepth());
obj._x = (i-1)*500;
obj.scaleContent = false;
obj.contentPath = "images/test"+i+".jpg";
}
}

Groeten,
http://users.telenet.be/jansurf/cwo.png Jan

BlackCoder
%Europe/Berlin %883 %2008, 22:11
Bedankt voor de hulp!

Dit is precies wat ik nodig had! :)

- Roy