if Kette zusammenfassen

Sprint

Erfahrenes Mitglied
Hallo zusammen,

ich bin gerade dabei, für die Kundenseite ein Hilfesystem mit Enjoyhint zu bauen. Da der Ausgangspunkt für alle Hilfen auf der selben Seite sind, ergibt sich da eine ganze Reihe von Aufrufen, die ich gerne zusammenfassen würde.
Javascript:
var enjoyhint_instance = new EnjoyHint({});

var enjoyhint_script_steps_NP = [{ ... }];
var enjoyhint_script_steps_UIDmit = [{ ... }];
var enjoyhint_script_steps_UIDohne = [{ ... }];
var enjoyhint_script_steps_GB = [{ ... }];

setHilfeThema(thema);
if (thema == 'NP'){
    if ($('.npfeld').length == 0)
        alert('Im Moment haben Sie keine Prüfung.');
    else{
        enjoyhint_instance.set(enjoyhint_script_steps_NP);
    }
}
else if (thema == 'UIDmit')
    enjoyhint_instance.set(enjoyhint_script_steps_UIDmit);
else if (thema == 'UIDohne')
    enjoyhint_instance.set(enjoyhint_script_steps_UIDohne);
else if (thema == 'GB')
    enjoyhint_instance.set(enjoyhint_script_steps_GB);

enjoyhint_instance.run();
Und die Liste ist noch lange nicht fertig.

Für jedes Thema wird über enjoyhint_instance.set() die entsprechende Verlaufsbeschreibung zugewiesen. Die Namen unterscheiden sich aber nur in den letzten Zeichen und die sind mit dem Themenkürzel identisch. Ein Zusammensetzen mit + funktioniert nicht, ebensowenig wie eine Zuweisung über eine Variable, in der der Name zusammengesetzt wird. Nur mit eval() geht es. Aber auch, wenn ich hier nicht sehe, warum ein eval() Probleme verursachen könnte, würde ich gerne eine solche Kette, ein switch() oder eval() vermeiden.

Gibt es da eine Lösung, bzw. wäre eval() in diesem Fall ungefährlich?
 
Lösung
Das geht problemlos ohne eval() wenn Du ein Objekt bzw. ass. Array verwendest:
Code:
const enjoyhint_script_steps = {
    NP: [{ ... }],
    UIDmit: [{ ... }],
    UIDohne: [{ ... }],
    GB: [{ ... }]
};
Dann greifst Du auf die Elemente so zu:
Code:
enjoyhint_instance.set(enjoyhint_script_steps[thema]);
und die Kette von ifs entfällt.
Das geht problemlos ohne eval() wenn Du ein Objekt bzw. ass. Array verwendest:
Code:
const enjoyhint_script_steps = {
    NP: [{ ... }],
    UIDmit: [{ ... }],
    UIDohne: [{ ... }],
    GB: [{ ... }]
};
Dann greifst Du auf die Elemente so zu:
Code:
enjoyhint_instance.set(enjoyhint_script_steps[thema]);
und die Kette von ifs entfällt.
 
Lösung
Und wenn du wieder mal irgendwo if else if else if ... auf die gleiche Variable hast, nimm switch(). Macht das ganze übersichtlicher.
 

Neue Beiträge

Zurück