PDA

Volledige versie bekijken : if-probleem - dringend!-


nookyalur
%Europe/Berlin %708 %2006, 17:00
Hallo,

ik wil een knopje (genaamd 'linkbutton') al dan niet tonen op de website, afhankelijk of er een externe link aan het item gekoppeld is of niet. Dit wordt ingesteld in de xml-file:
<linkbutton>0</linkbutton>
een 0 staat voor geen link, een 1 voor een link

nu wil ik dit binnenhalen dmv dit actionscript:
if (linkbutton[p] != "0") {
linkbutton.visible= true;
linkbutton.onRelease = function() {
getURL(link[p], "_blank");
};
} else {
linkbutton.visible= false;
}

maar de knop blijft altijd staan, zelfs wanneer er een "0" in mijn xml staat...

alle hulp is welkom!

xtr0
%Europe/Berlin %710 %2006, 17:02
Wat krijg je als je linkbutton[p] traced? En zou je alle andere code ook even kunnen posten? Daar kan het ook aan liggen...

Erwinzzz
%Europe/Berlin %710 %2006, 17:02
raar dat 'visible' niet blauw word? Nee.. :p

f (linkbutton[p] != "0") {
linkbutton._visible= true;
linkbutton.onRelease = function() {
getURL(link[p], "_blank");
};
} else {
linkbutton._visible= false;
}

Het is '_visible"

nookyalur
%Europe/Berlin %719 %2006, 17:15
Wat krijg je als je linkbutton[p] traced? En zou je alle andere code ook even kunnen posten? Daar kan het ook aan liggen...
undefined...

Hier mijn volledige as:
function loadXML(loaded) {
if (loaded) {
xmlNode = this.firstChild;
image = [];
description = [];
info = [];
nummer = [];
link = [];
linkbutton = [];
//
total = xmlNode.childNodes.length;
for (i=0; i<total; i++) {
image[i] = xmlNode.childNodes[i].childNodes[0].firstChild.nodeValue;
description[i] = xmlNode.childNodes[i].childNodes[1].firstChild.nodeValue;
nummer[i] = xmlNode.childNodes[i].childNodes[2].firstChild.nodeValue;
info[i] = xmlNode.childNodes[i].childNodes[3].firstChild.nodeValue;
link[i] = xmlNode.childNodes[i].childNodes[4].firstChild.nodeValue;
linkbutton[i] = xmlNode.childNodes[i].childNodes[5].firstChild.nodeValue;
//
}
firstImage();
} else {
content = "file not loaded!";
}
}
xmlData = new XML();
xmlData.ignoreWhite = true;
xmlData.onLoad = loadXML;
xmlData.load("nookyalur.xml");
/////////////////////////////////////
listen = new Object();
listen.onKeyDown = function() {
if (Key.getCode() == Key.UP) {
prevImage();
} else if (Key.getCode() == Key.DOWN) {
nextImage();
}else if (Key.getCode() == Key.SPACE) {
getURL(link[p], "_blank");
}
};
Key.addListener(listen);
previous_btn.onRelease = function() {
prevImage();
};
next_btn.onRelease = function() {
nextImage();
};
/////////////////////////////////////
p = 0;
this.onEnterFrame = function() {
filesize = picture.getBytesTotal();
loaded = picture.getBytesLoaded();
preloader._visible = true;
if (loaded != filesize) {
preloader.preload_bar._xscale = 100*loaded/filesize;
} else {
preloader._visible = false;
if (picture._alpha<100) {
picture._alpha += 10;
}
}
};

///// functie met check of er een link moet zijn of niet /////

/*
linkbutton.onRelease = function() {
getURL(link[p], "_blank");
};
*/

if (linkbutton[p] != "0") {
linkbutton._visible= true;
linkbutton.onRelease = function() {
getURL(link[p], "_blank");
};
} else {
linkbutton._visible= false;
}

//////////////////////////////////////////////////////////////////

function nextImage() {
if (p<(total-1)) {
p++;
if (loaded == filesize) {
picture._alpha = 0;
picture.loadMovie(image[p], 1);
desc_txt.text = description[p];
desc_nummer.text = nummer[p];
desc_info.text = info[p];
//picture_num();
}
}
}
function prevImage() {
if (p>0) {
p--;
picture._alpha = 0;
picture.loadMovie(image[p], 1);
desc_txt.text = description[p];
desc_nummer.text = nummer[p];
desc_info.text = info[p];
//picture_num();
}
}
function firstImage() {
if (loaded == filesize) {
picture._alpha = 0;
picture.loadMovie(image[0], 1);
desc_txt.text = description[0];
desc_nummer.text = nummer[0];
desc_info.text = info[0];
//picture_num();
}
}

/*
function picture_num() {
current_pos = p+1;
pos_txt.text = current_pos+" / "+total;
}
*/


mijn xml-file:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<images>
<pic>
<image>images/beeld01.jpg</image>
<caption>Titel van de foto</caption>
<nummer>1</nummer>
<info>hier komt de info omtrent de foto</info>
<link>http://www.link naar de foto.be</link>
<linkbutton>1</linkbutton>
</pic>
</images>

De fout zit ergens in regel 72 tot 80.

nookyalur
%Europe/Berlin %722 %2006, 17:21
Bij het tracen:
trace (linkbutton);
resultaat:
_level0.linkbutton (verwijzing naar mijn knop met instancenaam linkbutton)

Bij het tracen:
trace (linkbutton[p]);
resultaat:
undefined


?

xtr0
%Europe/Berlin %726 %2006, 17:26
al geprobeerd de variable buiten de onload functie aan te maken?

Niek_M
%Europe/Berlin %734 %2006, 17:38
al geprobeerd de variable buiten de onload functie aan te maken?

Idd, maak de array buiten de onLoad, en 'duw' de xml met de onLoad in de Array.
Nu zal de array linkbutton gewoon toegankelijk zijn.

nookyalur
%Europe/Berlin %735 %2006, 17:39
ik heb alles hier (www.nookyalur.com/nookyalur.zip) online gezet.

het probleem zit hem in het uitlezen van mijn 'linkbutton' uit mijn xml...

BernardV
%Europe/Berlin %740 %2006, 17:46
Het probleem is dat je niet wacht totdat je XML geladen is met het aanmaken van je buttons.

Dus even een functie maken die je buttons aanmaakt en die functie aanroepen in de onload van je XML (wel nadat je alles geparsed hebt).

nookyalur
%Europe/Berlin %744 %2006, 17:51
euh... eventjes melden dat ik pas begonnen ben met actionscript... dus het klinkt redelijk chinees...

:S

xtr0
%Europe/Berlin %746 %2006, 17:55
noem de array anders, je gebruikt die naam namelijk al voor een instance name van een button, maak hem ook buiten de onload functie aan

BernardV
%Europe/Berlin %747 %2006, 17:56
Nou je roept bv ook firstImage() aan in je onLoad van de XML
Die voert ook die functie pas uit als de XML geladen is.

Stel je zet onder firstImage() even makeButtons();

en dan vervang je deze code:

trace (inkbutton.values[p]);
if (linkbutton.values[p] != "0") {

linkbutton._visible= true;
linkbutton.onRelease = function() {
getURL(link[p], "_blank");
};
} else {
linkbutton._visible= false;
}

Door:

function makeButtons(){

trace (inkbutton.values[p]);
if (linkbutton.values[p] != "0") {

linkbutton._visible= true;
linkbutton.onRelease = function() {
getURL(link[p], "_blank");
};
} else {
linkbutton._visible= false;
}
}

Dan worden die knoppen pas aangemaakt als de XML er ook daadwerkelijk is.

Je moet het zo zien:

1. Je doet een aanroep op XML te laden
2. Je maakt buttons op basis van die XML

Maar 1 is nog niet klaar, want je hebt alle code in 1 frame staan, dus wordt alles direct achter elkaar uitgevoerd.
Als je de buttons pas gaat aanmaken als de XML er ook daadwerkelijk is, werkt alles prima.
Bij mij traced hij op deze manier 1 ;)

BernardV
%Europe/Berlin %748 %2006, 17:57
noem de array anders, je gebruikt die naam namelijk al voor een instance name van een button, maak hem ook buiten de onload functie aan

Dat is sowieso een goed punt, maar Flash werkt wel (helaas)

nookyalur
%Europe/Berlin %759 %2006, 18:13
ok, bedankt voor de uitleg, nu snap ik het.
Ik krijg idd een 1 bij het tracen, maar wanneer ik bvb naar het derde item ga, dan traced hij niet meer (normaal een 0). En die knop blijft ook zichtbaar, terwijl hij onzichtbaar moet staan... :S

Ik heb de knop op de stage "URLknop" genaamd om verwarring te vermijden.

Dit is nu mijn AS
function loadXML(loaded) {
if (loaded) {
xmlNode = this.firstChild;
image = [];
description = [];
info = [];
nummer = [];
link = [];
linkbutton = [];
//
total = xmlNode.childNodes.length;
for (i=0; i<total; i++) {
image[i] = xmlNode.childNodes[i].childNodes[0].firstChild.nodeValue;
description[i] = xmlNode.childNodes[i].childNodes[1].firstChild.nodeValue;
nummer[i] = xmlNode.childNodes[i].childNodes[2].firstChild.nodeValue;
info[i] = xmlNode.childNodes[i].childNodes[3].firstChild.nodeValue;
link[i] = xmlNode.childNodes[i].childNodes[4].firstChild.nodeValue;
linkbutton[i] = xmlNode.childNodes[i].childNodes[5].firstChild.nodeValue;
//
}
firstImage();
makeButtons();
} else {
content = "file not loaded!";
}
}
xmlData = new XML();
xmlData.ignoreWhite = true;
xmlData.onLoad = loadXML;
xmlData.load("nookyalur.xml");
/////////////////////////////////////
listen = new Object();
listen.onKeyDown = function() {
if (Key.getCode() == Key.UP) {
prevImage();
} else if (Key.getCode() == Key.DOWN) {
nextImage();
} else if (Key.getCode() == Key.SPACE) {
getURL(link[p], "_blank");
}
};
Key.addListener(listen);
previous_btn.onRelease = function() {
prevImage();
};
next_btn.onRelease = function() {
nextImage();
};
/////////////////////////////////////
p = 0;
this.onEnterFrame = function() {
filesize = picture.getBytesTotal();
loaded = picture.getBytesLoaded();
preloader._visible = true;
if (loaded != filesize) {
preloader.preload_bar._xscale = 100*loaded/filesize;
} else {
preloader._visible = false;
if (picture._alpha<100) {
picture._alpha += 10;
}
}
};
function nextImage() {
if (p<(total-1)) {
p++;
if (loaded == filesize) {
picture._alpha = 0;
picture.loadMovie(image[p], 1);
desc_txt.text = description[p];
desc_nummer.text = nummer[p];
desc_info.text = info[p];
//picture_num();
}
}
}
function prevImage() {
if (p>0) {
p--;
picture._alpha = 0;
picture.loadMovie(image[p], 1);
desc_txt.text = description[p];
desc_nummer.text = nummer[p];
desc_info.text = info[p];
//picture_num();
}
}
function firstImage() {
if (loaded == filesize) {
picture._alpha = 0;
picture.loadMovie(image[0], 1);
desc_txt.text = description[0];
desc_nummer.text = nummer[0];
desc_info.text = info[0];
//picture_num();
}
}
function makeButtons() {
trace(linkbutton[p]);
if (linkbutton[p] != "0") {
URLknop._visible = true;
URLknop.onRelease = function() {
getURL(link[p], "_blank");
};
} else {
URLknop._visible = false;
}
}

Trouwens, die "linkbutton.values[p]" werkte niet (geeft undefined), "linkbutton[p]" wel.

BernardV
%Europe/Berlin %764 %2006, 18:20
Trouwens, die "linkbutton.values[p]" werkte niet (geeft undefined), "linkbutton[p]" wel.

Klopt, was ik vergeten te verwijderen :)

nookyalur
%Europe/Berlin %781 %2006, 18:45
Hmm... wanneer ik nu mijn eerste waarden in mijn xml-file op 0 zet ipv 1, staat de knop nu op unvisible. Maar de volgende moet terug visible zijn, en dit doet hij niet...

hoe kan ik dit oplossen? (ik vermoed een for-loop, maar hoe ziet dat er dan uit en waar zet ik dit?)

xtr0
%Europe/Berlin %797 %2006, 19:08
Dit komt omdat je die if statement maar 1 keer uitvoert. Doe de if statement in een functie en roep die steeds aan als je naar de volgende foto gaat.

nookyalur
%Europe/Berlin %800 %2006, 19:12
inderdaad, ik was er net ook op gekomen!

Beiden hartelijk dank voor de hulp en de uitleg!
Reputatiepunten komen jullie richting uit!