Volledige versie bekijken : LoadVars in een class - probleem.
meagain
%Europe/Berlin %484 %2005, 12:37
Waarom werkt dit niet:
class test {
static var test_lv:LoadVars;
function test(){}
function doeHet(){
test_lv = new LoadVars();
test_lv.onLoad = function(success:Boolean){
if (success){
trace('Yes');
}else{
trace('No');
}
}
test_lv.load('test.txt');
}
}
Aanroep vd class:
var testje:test = new test();
testje.doeHet();
De onLoad-event wordt nooit uitgevoerd ???
Dauntless
%Europe/Berlin %497 %2005, 12:56
Scoping probleem
import mx.utils.Delegate
class test {
static var test_lv:LoadVars;
function test(){}
function doeHet(){
test_lv = new LoadVars();
test_lv.onLoad = Delegate.create(this, onLoadEvent);
test_lv.load('test.txt');
}
public function onLoadEvent(success:Boolean){
if (success){
trace('Yes');
}else{
trace('No');
}
}
}
Maar je moet wel minstens Flash 7.2 hebben.
Roenes
%Europe/Berlin %505 %2005, 13:07
Dauntless, ondanks dat jouw oplossing een goede is, waar ligt precies het scoping probleem in de originele manier? Want de onLoad wordt toch in dezelfde functie aangemaakt dus dat zou naar behoren moeten werken lijkt mij. :p
meagain
%Europe/Berlin %508 %2005, 13:11
Je oplossing werkt ook niet ?!? En ik werk met de vereiste versie !
Roenes
%Europe/Berlin %509 %2005, 13:13
Werkt je class uberhaupt wel? Knal er eens een trace tussen. Want ik was er vrij zeker van dat je classes altijd met een hoofdletter moet beginnen. (of is dit toch een best practise? neej toch :p)
Dauntless
%Europe/Berlin %509 %2005, 13:14
Ok, fout gezien :I
Ik denk dat dan het probleem is dat je hem static hebt. Maak hem ofwel private, of spreek hem aan met Test.test_lv
Dauntless
%Europe/Berlin %509 %2005, 13:14
(of is dit toch een best practise? neej toch :p)
Jwel :)
meagain
%Europe/Berlin %522 %2005, 13:33
Sorry, het zak wel aan mij liggen, maar het wil niet lukken.
import mx.utils.Delegate
class test {
static var test_lv:LoadVars;
function test(){}
function doeHet(){
test.test_lv = new LoadVars();
test.test_lv.onLoad = Delegate.create(this, onLoadEvent);
test.test_lv.load('test.txt');
trace('ok');//Deze wordt uitgevoerd
}
public function onLoadEvent(success:Boolean){
trace('ok1');//Deze niet meer
if (success){
trace('Yes');
}else{
trace('No');
}
}
}
Heb al meerdere aanpassingen gedaan, maar de onLoad wordt niet uitgevoerd ?!?
TheDutch
%Europe/Berlin %792 %2005, 20:01
Hier werkt jouw class gewoon met alle traces, dus je moet wat anders fout doen in je FLA ofzo :).
Trouwens het aanroepen van elementen binnen de class met de classnaam -in dit geval "test"- is bad practice! Het beste is om dit met "this" aan te roepen zodat wanneer de classnaam veranderd je niet al je code hoeft aan te passen. Ook is "this" sneller dan de classnaam zelf omdat bij "this" Flash al direct weet dat hij binnen het huidige object moet kijken en bij de classnaam eerst moet gaan kijken waar die uithangt.
Dat het LoadVars object "static" is maakt niets uit. Het enige waar je er problemen mee gaat krijgen is wanneer je meerdere instanties van de class gebruikt en ook nog eens tegelijk de functie doeHet() gaat uitvoeren. Static zegt niets anders dan dat hij maar eenmaal per class word aangemaakt ipv. bij elke instantie van een class.
meagain
%Europe/Berlin %803 %2005, 20:17
Zit behoorlijk in de knoei hiermee.
Wat in ****naam doe ik dan mis ??
Nog effe de code:
import mx.utils.Delegate
class Test {
var test_lv:LoadVars;
function Test(){}
function doeHet(){
test_lv = new LoadVars();
test_lv.onLoad = Delegate.create(this, onLoadEvent);
//var aTest = Delegate.create(Test, onLoadEvent);
//test_lv.addEventListener("onLoad", aTest);
test_lv.load('test.txt');
trace('ok');//Deze wordt uitgevoerd
}
function onLoadEvent(success:Boolean){
trace('ok1');//Deze niet meer
if (success){
trace('Yes');
}else{
trace('No');
}
}
}
En zo roep ik ze aan:
var testje:Test = new Test();
testje.doeHet();
Heb hier totaal geen ervaring mee !
Met dank !
TheDutch
%Europe/Berlin %815 %2005, 20:33
Geef me anders even je FLA en class in een ZIP. Dan kan ik alles even goed doorlopen ;).
Trouwens, ik zie niet waar je je class importeerd...
meagain
%Europe/Berlin %827 %2005, 20:51
D8 dat ik de class niet moet importeren als ze in dezelfde directory staat als de .fla ? Maar ik kan hier mis in zijn; ik leer elke dag een stukje meer !
In elk geval:
function doeHet(tFile:String, tmc:MovieClip){
owner = tmc;
test_lv = new LoadVars();
test_lv.onLoad = Delegate.create(this, onLoadEvent);
test_lv.load(tFile);
owner.test_txt.text = '';
}
Heb alleen dit aangepast aan de class. Geef nu 2 args mee, en nu werkt het wel ?!?
Snap er echt niets meer van ?!? Heb mij gisteren-nacht thans heel serieus gehouden ... [:o)]
TheDutch
%Europe/Berlin %830 %2005, 20:55
Dat zou het probleem niet op moeten lossen. Waarschijnlijk zat er ergens anders wat fout dat je nu ook opgelost hebt. Fijn dat het werkt...maar dit is niet echt de juiste manier om dingen op te lossen ;).
Nogmaals, bij mij werkte jouw class altijd perfect!
meagain
%Europe/Berlin %847 %2005, 21:19
Deze uit mijn eerste post ??? [?]
TheDutch
%Europe/Berlin %847 %2005, 21:20
Nee, die van Dauntless :).
Roenes
%Europe/Berlin %952 %2005, 23:51
D8 dat ik de class niet moet importeren als ze in dezelfde directory staat als de .fla ?Even ter bevestiging: dat wat je zegt klopt. Als de class in dezelfde dir staat wordt ie herkend door flash :)
TheDutch
%Europe/Berlin %218 %2005, 06:14
Klopt, het is alleen niet erg verstandig om het op deze manier te gebruiken.
Ik snap het wel hoor, veel mensen hebben moeite een class path in te stellen ;).
meagain
%Europe/Berlin %329 %2005, 08:53
In real-life zullen classes mooi in een 'package' worden gestopt.
Een groot nadeel van flash-applications is dat ze bij de client 'draaien' in een browser. En in een brower kan je navigeren met de back / forward bttns of de refresh bttn (of sneltoetsen). Heb nog maar weinig flash-apps gezien die dit mooi konden oplossen, en toch zou er een oplossing zijn. Hebben jullie enkele links naar mooie oplossingen hiervoor ??
Mvg,
TheDutch
%Europe/Berlin %402 %2005, 10:39
Hier een tutorial (http://www.flashmagazine.com/688.htm) hoe dit te maken met "named anchors" :).
meagain
%Europe/Berlin %801 %2005, 20:14
Vind deze (http://www.actionscripts.org/tutorials/intermediate/Enabling_a_back_button_within_flash/index.shtml) beter .... ;)
vBulletin® v3.8.1, Copyright ©2000-2012, Jelsoft Enterprises Ltd.