PDA

Volledige versie bekijken : else if werkt niet


PVWEERT
%Europe/Berlin %882 %2005, 22:10
Ik heb de volgende code gebruikt in mijn swf:


// INIT
var loadUrl = "http://paulv.ovalon.com/go/medium/tv"; // KAN OOK DYNAMISCH IN BRON VAN HTML
xmlDoc = new XML();
xmlDoc.ignoreWhite = true;
xmlDoc.load (loadUrl);
xmlDoc.onLoad = function() {
checkTemplate(this);
}

// Variables
var templateStart = "xmlDoc.firstChild.firstChild.firstChild.nextSiblin g.nextSibling.nextSibling.firstChild";
var templateCount = ""; // .nextSibling add
var templateEnd = ".firstChild.childNodes";
var checked = "";
var viewtime = "";

// COUNTER
var clockSheet = "0"
var countTimer:Number = 1
var timeSheet = "0"
var timerClock = setInterval(timerSheet, 1000);


// CHECK TEMPLATE
function checkTemplate() {
var toCheck = _root.templateStart + _root.templateCount + _root.templateEnd
var viewTimeVar = "xmlDoc.firstChild.firstChild.firstChild.nextSiblin g.nextSibling.nextSibling.attributes.viewtime";
// trace(eval(viewTimeVar));
set("_root.checked", eval(toCheck));
set("_root.viewtime", eval(viewTimeVar));
// trace(_root.viewtime);
trace("_root.checked: " + _root.checked);
actCheck();
};

// DEVIDE BY TEMPLATE
function actCheck() {
if (_root.checked == undefined) {
set("_root.templateCount", "");
// trace("templateCount is emptied (value:" + _root.templateCount + ")");
restart();
} else if (_root.checked = "ARTICLE_IMAGE") {
_root.holder.loadMovie("ARTICLE_IMAGE.swf");
// loadARTICLE_IMAGE();
} else if (_root.checked = "IMAGE") {
_root.holder.loadMovie("IMAGE.swf");
// loadIMAGE();
} else if (_root.checked = "DOCUMENT") {
trace("no template for DOCUMENT set");
// _root.holder.loadMovie("DOCUMENT.swf");
addCount();
} else {
trace("error in actCheck");
};
};



// LOAD ARTICLE_IMAGE TEMPLATE AND PLAY -- CALLED BY TEMPLATE
function setARTICLE_IMAGE() {
var evalTitle = _root.templateStart + _root.templateCount + ".firstChild.nextSibling.firstChild.childNodes"
var evalSubtitle = _root.templateStart + _root.templateCount + ".firstChild.nextSibling.firstChild.nextSibling.chi ldNodes"
var evalIntro = _root.templateStart + _root.templateCount + ".firstChild.nextSibling.firstChild.nextSibling.nex tSibling.childNodes"
var evalText = _root.templateStart + _root.templateCount + ".firstChild.nextSibling.firstChild.nextSibling.nex tSibling.nextSibling.childNodes"
var evalImage = _root.templateStart + _root.templateCount + ".firstChild.nextSibling.firstChild.nextSibling.nex tSibling.nextSibling.nextSibling.firstChild.firstC hild.nextSibling.childNodes"
_root.holder.imageBox.loadMovie((eval(evalImage))) ;
_root.holder.titleBox.text = eval(evalTitle);
_root.holder.subtitleBox.text = eval(evalSubtitle);
_root.holder.introBox.text = eval(evalIntro);
_root.holder.textBox.text = eval(evalText);
set("_root.clockSheet", "1");
set("_root.countTimer", 1);
};

// LOAD IMAGE TEMPLATE AND PLAY
function setIMAGE() {
var evalImage = _root.templateStart + _root.templateCount + ".firstChild.nextSibling.firstChild.nextSibling.chi ldNodes"
_root.holder.imageBox.loadMovie((eval(evalImage))) ;
set("_root.clockSheet", "1");
set("_root.countTimer", 1);
};

// LOAD DOCUMENT TEMPLATE AND PLAY
function setDOCUMENT() {
// NO TEMPLATE SET
};

// timeSHEET
function timerSheet() {
if (_root.clockSheet == "1") {
if (_root.viewtime == _root.countTimer) {
clearInterval(timerClock);
trace("gelijk");
addCount();
} else {
trace("tellen");
set("_root.countTimer", _root.countTimer + 1);
};
};
};
// PREPARE RESTART
function addCount() {
set("_root.templateCount", _root.templateCount + ".nextSibling");
// trace(_root.templateCount);
restart();
};

// RESTART
function restart() {
_root.holder.unloadMovie();
checkTemplate();
};

// EIND PLAYER
stop();


In de in geladen swf's wordt setIMAGE() of setARTICLE_IMAGE() aangeroepen.

Echter gaat hij naar de tweede keer dat hij moet kijken wat voor template het is bij de functie actCheck gewoon door met het template ARTICLE_IMAGE en niet met IMAGE wat het in de .xml is. Wel laat hij IMAGE in als _root.checked. Er gaat dus iets fout bij de else if constructie in mijn ogen.

Maar wat?

Dauntless
%Europe/Berlin %899 %2005, 22:35
Bij == undefined doe je het goed, maar bij de rest niet...

== -> voor in een if, kijkt na op gelijkheid
= -> toekennings teken, zoals in var mijnVar = "hai";

Dus:
if(var1 == var2)

Als je
if(var1 = var2)
gebruikt zal je altijd true krijgen

Ps: Je krijgt sneller antwoord als je niet zo'n heel script hier online smijt. Haal bv alle irrelevante delen weg. Dat maakt het voor ons veel simpeler om je code te begrijpen en zien wat er fout is.
(Ook je uitleg onder je code mag wel iets duidelijker :p. Je moet je eigen zin eens lezen...)

PVWEERT
%Europe/Berlin %497 %2005, 12:57
Sorry, als ik ipv = een == neerzet werkt hij helemaal niet.

Terwijl als ik de waarde van _root.checked trace ik toch echt ARTICLE_IMAGE krijg.

Dauntless
%Europe/Berlin %499 %2005, 12:59
'k Zal nog eens kijken, maar die = moet zowieso door == vervangen worden!

Maak maar eens een nieuwe .fla en probeer dit:

var getal = 5;
if(getal = 5)
{
trace("getal = 5");
}
if(getal = 10)
{
trace("Maar getal is ook gelijk aan 10!");
}
if(getal = 20)
{
trace("en zelfs aan 20!!!");
}

Dauntless
%Europe/Berlin %515 %2005, 13:22
Maar leg nu het probleem nog is uit... Want de zin van in je eerste post slaat op niet veel :s.

En het is ook handig als je al die onnodige dingen eruit haalt (Zoals bv al dat _root.holder gedoe)

PVWEERT
%Europe/Berlin %571 %2005, 14:43
// DEVIDE BY TEMPLATE
function actCheck() {
if (_root.checked == undefined) {
set("_root.templateCount", "");
// trace("templateCount is emptied (value:" + _root.templateCount + ")");
restart();
} else if (_root.checked == "ARTICLE_IMAGE") {
_root.holder.loadMovie("ARTICLE_IMAGE.swf");
// loadARTICLE_IMAGE();
} else if (_root.checked == "IMAGE") {
_root.holder.loadMovie("IMAGE.swf");
// loadIMAGE();
} else if (_root.checked == "DOCUMENT") {
trace("no template for DOCUMENT set");
// _root.holder.loadMovie("DOCUMENT.swf");
addCount();
} else {
trace("error in actCheck");
};
};


Oke, in de functie die de bovenstaande aanroept krijgt _root.checked een waarde. Deze kan zijn: ARTICLE_IMAGE, IMAGE of DOCUMENT (en natuurlijk undefined). Maar als hij met die waarde deze if constructie aangaat, geeft hij "error in actCheck". Terwijl als ik _root.checked trace hij toch echt ARTICLE _IMAGE geeft.

Duidelijk?

Dauntless
%Europe/Berlin %577 %2005, 14:51
function actCheck() {
trace("_root.checked = "+_root.checked + " en is van het type "+typeof(_root.checked));
trace("_root.checked = article_image? "+(_root.checked == "ARTICLE_IMAGE"));
trace("_root.checked = image? "+(_root.checked == "IMAGE"));
trace("_root.checked = article? "+(_root.checked == "ARTICLE"));
trace("_root.checked = document? "+(_root.checked == "DOCUMENT"));

if (_root.checked == undefined) {
set("_root.templateCount", "");
// trace("templateCount is emptied (value:" + _root.templateCount + ")");
restart();
} else if (_root.checked == "ARTICLE_IMAGE") {
_root.holder.loadMovie("ARTICLE_IMAGE.swf");
// loadARTICLE_IMAGE();
} else if (_root.checked == "IMAGE") {
_root.holder.loadMovie("IMAGE.swf");
// loadIMAGE();
} else if (_root.checked == "DOCUMENT") {
trace("no template for DOCUMENT set");
// _root.holder.loadMovie("DOCUMENT.swf");
addCount();
} else {
trace("error in actCheck");
};
};

Dan moet je gaan tracen hé

PVWEERT
%Europe/Berlin %640 %2005, 16:22
Oke, ik krijg dan dit terug:

_root.checked = ARTICLE_IMAGE en is van het type object
_root.checked = article_image? false
_root.checked = image? false
_root.checked = article? false
_root.checked = document? false
Error in actCheck! We checked: ARTICLE_IMAGE

Wat moet ik dan veranderen om het wel te laten werken?

Dauntless
%Europe/Berlin %642 %2005, 16:25
Wel, hij zegt dat _root.checked een object is, dan kan je hem niet met een string gaan vergelijken!

set("_root.checked", eval(toCheck));
set("_root.viewtime", eval(viewTimeVar));
Is héél oud, dit schrijf je beter als:

_root.checked = toCheck;
_root.viewtime = viewTimeVar;


Da's toch duidelijker? :)

var toCheck = _root.templateStart + _root.templateCount + _root.templateEnd
_root.checked = toCheck;

Dus nu stel je die checked gelijk aan templeStart (etc). Maar dat is geen string denk ik ...?

PVWEERT
%Europe/Berlin %651 %2005, 16:38
Dat is inderdaad duidelijker. Maar het is geen string nee, wat ik dan terug krijg is templateStart, templateCount en templateEnd achter elkaar. Zeg maar:


var templateStart = "xmlDoc.firstChild.firstChild.firstChild.nextSiblin g.nextSibling.nextSibling.firstChild";
var templateCount = ""; // .nextSibling add
var templateEnd = ".firstChild.childNodes";


Maar dan achter elkaar. Ik moet echter de waarde wat er in de xml staat hebben en niet:

xmlDoc.firstChild.firstChild.firstChild.nextSiblin g.nextSibling.nextSibling.firstChild.firstChild.ch ildNodes

Dat krijg ik namelijk nu.

Dauntless
%Europe/Berlin %663 %2005, 16:55
'k Weet eigenlijk niet of het mogelijk is om die 'gewoon' achter elkaar te zetten... :s

PVWEERT
%Europe/Berlin %672 %2005, 17:08
Hm. Wat ik zoek is dat ik in een bepaalde tekenreeks iets tussen kan zetten. Bijvoorbeeld: var 1 = boom, var 2 = $variabel, var 3 = boompje

Dan moet hij als var 2 geen inhoud heeft er:

boomboompje van maken, en kijken welke waarde ervoor boomboompje in de xml staat.
maar als var 2 de waarde van kat heeft moet hij kijken welke waarde boomkatboompje in de xml heeft.