PDA

Volledige versie bekijken : Var uit functie


ScriptSuite
%Europe/Berlin %309 %2005, 08:25
eenFunctie = function () {
verzamel_bin = [];
var service = new WebService("Een service");
serviceResultObj = service.HaalWat(this);
service.onLoad = trace("aan het laden");
serviceResultObj.onResult = function(result) {
for (h = 0; h < result.length; h++) {
title = result[h].attributes.title;
var ob = {titel:title};
verzamel_bin.push(ob);
}
trace("VerzamelBin " + verzamel_bin); // Succes
_global.verzamel_bin = verzamel_bin;
};
};
eenFunctie();
trace("Global_VerzamelBin " + _global.verzamel_bin); // Geen Succes

Zoals te zien in het voorbeeldje, binnen de functie komt de var wel terug, buiten de functie is hij undefined.
Iemand daar een remedie voor?

SaphuA
%Europe/Berlin %315 %2005, 08:33
De variable eerst maken buiten de functie is de makkelijkste manier :)
Je kunt geloof ik ook localToGlobal gebruiken..


var Verzamel_bin = [];
eenFunctie = function () {
var service = new WebService("Een service");
serviceResultObj = service.HaalWat(this);
service.onLoad = trace("aan het laden");
serviceResultObj.onResult = function(result) {
for (h = 0; h < result.length; h++) {
title = result[h].attributes.title;
var ob = {titel:title};
verzamel_bin.push(ob);
}
};
};
eenFunctie();

ScriptSuite
%Europe/Berlin %350 %2005, 09:25
De variable eerst maken buiten de functie is de makkelijkste manier :)
Je kunt geloof ik ook localToGlobal gebruiken..


var Verzamel_bin = [];
eenFunctie = function () {
var service = new WebService("Een service");
serviceResultObj = service.HaalWat(this);
service.onLoad = trace("aan het laden");
serviceResultObj.onResult = function(result) {
for (h = 0; h < result.length; h++) {
title = result[h].attributes.title;
var ob = {titel:title};
verzamel_bin.push(ob);
}
};
};
eenFunctie();

Hier staat precies hetzelfde behalve dat Verzamel_bin ineens met een hoofdletter geschreven is en deze nu buiten de functie staat.
E.e.a. lost echter helaas niets op.

De Kale
%Europe/Berlin %377 %2005, 10:03
dit is een scope probleem, een array opslaan gebeurt by reference...
in de functie gaat ie weg, dus ook op de _global.
gebruik Array.concat() om het te kopieren (alleen 1d array) of zet de waarden direct in de _global array

ScriptSuite
%Europe/Berlin %483 %2005, 12:36
dit is een scope probleem, een array opslaan gebeurt by reference...
in de functie gaat ie weg, dus ook op de _global.
gebruik Array.concat() om het te kopieren (alleen 1d array) of zet de waarden direct in de _global array

Misschien een klein voorbeeldje?
Het liefst met de voorbeeld functie boven.
TIA

Roenes
%Europe/Berlin %500 %2005, 13:00
Je kunt geloof ik ook localToGlobal gebruiken..even ter informatie: localToGlobal en globalToLocal wordt alleen gebruikt bij coordinaten van mc's en dergelijke. Dit heeft dus geen invloed op variabelen om over te brengen of iets dergelijks. :)

FlashL
%Europe/Berlin %512 %2005, 13:17
Waarom zet je die global variablen niet gewoon in de _root

SaphuA
%Europe/Berlin %539 %2005, 13:57
even ter informatie: localToGlobal en globalToLocal wordt alleen gebruikt bij coordinaten van mc's en dergelijke. Dit heeft dus geen invloed op variabelen om over te brengen of iets dergelijks. :)
Hehe.. my bad ;)


En scriptsuite, mijn manier werkt dus wel:

var var_two;
eenFunctie = function () {
var var_one = "Var 1";
var_two = "Var 2";
trace(var_one);
trace(var_two);
trace("----");
};
eenFunctie();
trace(var_one);
trace(var_two);

ScriptSuite
%Europe/Berlin %564 %2005, 14:33
Hehe.. my bad ;)


En scriptsuite, mijn manier werkt dus wel:

var var_two;
eenFunctie = function () {
var var_one = "Var 1";
var_two = "Var 2";
trace(var_one);
trace(var_two);
trace("----");
};
eenFunctie();
trace(var_one);
trace(var_two);


Niet so bad hoor ;) , zo is het bij mij ook al duizenden malen gelukt.
Je gebruikt nu maar één functie in tegenstelling tot een functie in een functie..

En daar gaat het nu net mis.

ScriptSuite
%Europe/Berlin %565 %2005, 14:34
Waarom zet je die global variablen niet gewoon in de _root

Dat was mijn allereerste optie.
Gedaan & geen result.

ScriptSuite
%Europe/Berlin %414 %2005, 10:57
Intussen een work-around bedacht door gebruik van nog een functie in de root .
Binnen de tweede functie (diepte) wordt verwezen naar de _root.functie alwaar het Object wordt gevuld.
Ook deze wijze had niet het gewenste resultaat.

ScriptSuite
%Europe/Berlin %618 %2005, 15:50
Ik ben eruit, bedankt voor de bijdrage.