Forum Doku Wiki Blog

Forumsarchiv 2011, August
Rückgabewert einer Funktion in XSL als glob. Variable festlegen

archivierte Beiträge lesen

  1. (XSL) Rückgabewert einer Funktion in XSL als glob. Variable festlegen von defiant2369, 02. 08. 2011, 14:33

Rückgabewert einer Funktion in XSL als glob. Variable festlegen

Der folgende Beitrag wurde am 02. 08. 2011, 14:33 Uhr von defiant2369 veröffentlicht.

Hallo,

ich habe innerhalb eines XSL-Dokuments ein JavaScript mit einer Funktion, welches mir als Rückgabewert 'true' oder 'false' liefert. Diese Werte möchte ich gerne als gloable Variable festlegen, damit ich sie im weteren Verlauf des Dokuments abfragen kann mittels "when test".
Geht sowas überhaupt?

Hier das JavaScript:
function is200series ()
{
    if (navigator.userAgent.search(/4(0[89]|1[01])/)>0)
    {return true;}
    else {return false;}
}


Als Variable wollte ich das so festlegen:
<xsl:variable name="C200">
....
</xsl:variable>


Dei Funktion selber rufe ich im BODY mittels 'onload' auf.

Rückgabewert einer Funktion

Der folgende Beitrag wurde am 02. 08. 2011, 15:47 Uhr von Kai345 veröffentlicht.

Mae  govannen!

Sorry, zu deinem eigentlichen Problem kann ich leider nichts sagen, aber mir ist die JS-Funktion aufgefallen. Explizite Rückgabe von boolschen Werten in Abhängigkeit einer Bedingung ist nicht notwendig

> function is200series ()
> {
>     if (navigator.userAgent.search(/4(0[89]|1[01])/)>0)
>     {return true;}
>     else {return false;}
> }
>


entspricht

function is200series ()
{
    return (navigator.userAgent.search(/4(0[89]|1[01])/)>0);
}


(Die Klammern um die Bedingung kann man auch noch weglassen, ich schreibe sie wegen der besseren Les- und Erfassbarkeit des Codes.)

Stur lächeln und winken, Männer!
Kai
--
Dank Hixies Idiotenbande geschieht grade eben wieder ein Umdenken
in Richtung "Mess up the Web".(suit)
SelfHTML-Forum-Stylesheet

Rückgabewert einer Funktion

Der folgende Beitrag wurde am 02. 08. 2011, 16:50 Uhr von dedlfix veröffentlicht.

Hi!

> Sorry, zu deinem eigentlichen Problem kann ich leider nichts sagen,

Aber ich vielleicht. Variablen in XSL sind quasi Konstanten. Ihr Wert lässt sich nur ein einziges Mal und an einer einzigen Stelle festlegen. Deswegen kann man bedingte Inhalte nicht à la

  if (bedingung)
    <var name=foo>x</var>
  else
    <var name=foo>y</var>

notieren, sondern nur nach dem Prinzip

  <var name=foo>
    if (bedingung)
      x
    else
      y
  </var>

Wie auch immer Javascript ein Ergebnis an XSL zurückliefert, es muss innerhalb von <xsl:variable>...</xsl:variable> geschehen.

>     return (navigator.userAgent.search(/4(0[89]|1[01])/)>0);
> (Die Klammern um die Bedingung kann man auch noch weglassen, ich schreibe sie wegen der besseren Les- und Erfassbarkeit des Codes.)

Für mich wäre das keine Verbesserung sondern eine Verschlechterung. Klammern, die nicht zwingend aus syntaktischen Gründen gesetzt werden müssen, wie zum Einklammern der if-Bedingung, dienen der Priorisierung eines Teilausdrucks entgegen der Operatorenrangfolge. Ich sehe da also eine Klammer und fange an, nach dem priorisierten Teil zu suchen, und ... April, April ... keiner da, nur ein weiteres Klammernpaar, das bei der Findung von Klammern-Zugehörigkeiten zusätzlich berücksichtigt werden muss.


Lo!

Rückgabewert einer Funktion

Der folgende Beitrag wurde am 02. 08. 2011, 17:17 Uhr von Kai345 veröffentlicht.

Mae  govannen!


> >     return (navigator.userAgent.search(/4(0[89]|1[01])/)>0);
> > (Die Klammern um die Bedingung kann man auch noch weglassen, ich schreibe sie wegen der besseren Les- und Erfassbarkeit des Codes.)
>
> Für mich wäre das keine Verbesserung sondern eine Verschlechterung. Klammern, die nicht zwingend aus syntaktischen Gründen gesetzt werden müssen, wie zum Einklammern der if-Bedingung, dienen der Priorisierung eines Teilausdrucks entgegen der Operatorenrangfolge. Ich sehe da also eine Klammer und fange an, nach dem priorisierten Teil zu suchen, und ... April, April ... keiner da, nur ein weiteres Klammernpaar, das bei der Findung von Klammern-Zugehörigkeiten zusätzlich berücksichtigt werden muss.

Das ist eine Sache der persönlichen Präferenz und des bevorzugten Programmier-Stils, insofern könnte man da ewig diskutieren.

Bei _mir_ ist es so, wenn ich lese

return navigator.userAgent.search(/4(0[89]|1[01])/)>0;

kann es passieren, daß mein Eyes-to-Brain-Parser nur return navigator.userAgent.search(/4(0[89]|1[01])/) liest. Bei return (... ist die Wahrscheinlichkeit geringer, denn dann schaue ich genauer hin.

Allerdings wäre bei meinem Programmierstil das Scheitern etwas weniger wahrscheinlich, da ich zwingend vor und hinter jedem Operator ein Leerzeichen setze.

Stur lächeln und winken, Männer!
Kai
--
Dank Hixies Idiotenbande geschieht grade eben wieder ein Umdenken
in Richtung "Mess up the Web".(suit)
SelfHTML-Forum-Stylesheet

Rückgabewert einer Funktion

Der folgende Beitrag wurde am 03. 08. 2011, 21:12 Uhr von molily veröffentlicht.

> kann es passieren, daß mein Eyes-to-Brain-Parser nur return navigator.userAgent.search(/4(0[89]|1[01])/) liest. Bei return (... ist die Wahrscheinlichkeit geringer, denn dann schaue ich genauer hin.
>
> Allerdings wäre bei meinem Programmierstil das Scheitern etwas weniger wahrscheinlich, da ich zwingend vor und hinter jedem Operator ein Leerzeichen setze.

Deshalb würde ich der Einfachheit halber vorschlagen:

return /4(0[89]|1[01])/.test(navigator.userAgent);

;)

(Das macht allerdings etwas anderes als search() > 0, wobei ich vermute, dass > -1 gemeint war, daher obiger Vorschlag.)

Mathias

Rückgabewert einer Funktion

Der folgende Beitrag wurde am 03. 08. 2011, 11:19 Uhr von defiant2369 veröffentlicht.

> Hi!
>
> > Sorry, zu deinem eigentlichen Problem kann ich leider nichts sagen,
>
> Aber ich vielleicht. Variablen in XSL sind quasi Konstanten. Ihr Wert lässt sich nur ein einziges Mal und an einer einzigen Stelle festlegen. Deswegen kann man bedingte Inhalte nicht à la
>
>   if (bedingung)
>     <var name=foo>x</var>
>   else
>     <var name=foo>y</var>
>
> notieren, sondern nur nach dem Prinzip
>
>   <var name=foo>
>     if (bedingung)
>       x
>     else
>       y
>   </var>
>
> Wie auch immer Javascript ein Ergebnis an XSL zurückliefert, es muss innerhalb von <xsl:variable>...</xsl:variable> geschehen.

OK, Danke schonmal für den Hinweis.
Also müßte ich das Script innerhalb der <xsl:variable> ausführen oder wie muß ich mir das vorstellen?

Rückgabewert einer Funktion

Der folgende Beitrag wurde am 03. 08. 2011, 11:30 Uhr von dedlfix veröffentlicht.

Hi!

> > Wie auch immer Javascript ein Ergebnis an XSL zurückliefert, es muss innerhalb von <xsl:variable>...</xsl:variable> geschehen.
> Also müßte ich das Script innerhalb der <xsl:variable> ausführen oder wie muß ich mir das vorstellen?

Da ich nicht weiß, wie Javascript mit XSL zusammenarbeitet, kann ich das nicht genau beantworten. Wenn es ähnlich wie bei PHP funktioniert, also XSL-Code mit eingebauten Javascript-Code-Inseln, dann: ja, das Script kann innerhalb des xsl:variable-Elements stehen. Jedenfalls muss das Ergebnis dort drin landen.


Lo!

© 1998-2013 SELFHTMLImpressumSoftware: Classic Forum 3.4