Sie sind nicht angemeldet.

1

Dienstag, 28. November 2017, 09:46

Elegante Möglichkeit eine js-Funktion mit Rückgabewert zu verwenden

Hallo,

ich habe eine js-Funktion, die ich im actionsscript (vtourskin.xml) aufrufen und anschließend das Ergebnis verwenden möchte:

Javascript-Funktion:

var returnText
// globale Variable für jsget

function cleantext(curText){
returnText = curText.replace(/^[^<].*\n/g, "").replace(/<[^h].*\n/g, "").replace(/linkedscene/g, "").replace(/</g, "##").replace(/>/g, "").replace(/\//g, "").replace(/\n/g, "");
return false
// Eigentlich möchte ich viel lieber return returnText verwenden
}


Bisheriger Aufruf im actionscript:
js(cleantext(get(curText)));
jsget(curText, 'returnText');

Gibt es ohne einen aufwendigen Zusammenbau eines Textelements einen eleganteren Aufruf von cleantext mit Ergebnisrückgabe?
Dafür würde ich selbstredend dann returnText als lokale Variable in der js-Funktion deklarieren und mit return zurückgeben.

Gruß,

Sebastian

toosten

Fortgeschrittener

Beiträge: 521

Wohnort: Berlin

Beruf: Software-Entwickler bei VR-Easy ( HTML, JS, PHP, krpano, C++, Java )

  • Nachricht senden

3

Montag, 4. Dezember 2017, 16:42

1.19-
https://krpano.com/docu/actions/#jsget
jsget(curText, 'cleantext(get(curText))'); // ungestestet
Hallo leider funktioniert es nicht, da krpano (1.19-pr13) das "get" nicht versteht...
krpano 1.19-pr14 hat leider noch andere Probleme mit js und jsget (siehe anderer Beitrag)...

Gruß,

Sebastian *sad*

4

Montag, 4. Dezember 2017, 17:21

jsget(curText, calc('cleantext('+curText+');'); // auch ungestestet (variable wird im xml aufgelöst)
oder vielleicht auch:
jsget(curText, 'cleantext(krpano.get("curText"));'); //dito :) (variable wird im js aufgelöst)

toosten

Fortgeschrittener

Beiträge: 521

Wohnort: Berlin

Beruf: Software-Entwickler bei VR-Easy ( HTML, JS, PHP, krpano, C++, Java )

  • Nachricht senden

5

Dienstag, 5. Dezember 2017, 07:22


Man kann actions auch in js schreiben:
https://krpano.com/docu/xml/#action.js


Du hast diese Möglichkeit völlig ignoriert:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
	<action name="teste">
		set( curText, 'linkedscene Testtext');
		cleantext( get(curText), curText);
		js( alert(get(curText)));

		cleantext( 'linkedscene Testtext2', return);
		js( alert(get(return)));
	</action>

	<action name="cleantext" type="Javascript" ><![CDATA[ 
		krpano.set( args[2], args[1].replace(/^[^<].*\n/g, "").replace(/<[^h].*\n/g, "").replace(/linkedscene/g, "").replace(/</g, "##").replace(/>/g, "").replace(/\//g, "").replace(/\n/g, ""));
	]]></action>


Und über Javascript funktioniert es auch ;-)

js( "cleantext( 'linkedscene Testtext2', 'return')");

Quellcode

1
2
3
4
5
6
7
		function cleantext( curText, ret){
			var krpano= document.getElementById("krpanoObject");
			if( krpano)
				krpano.set( ret, curText.replace(/^[^<].*\n/g, "").replace(/<[^h].*\n/g, "").replace(/linkedscene/g, "").replace(/</g, "##").replace(/>/g, "").replace(/\//g, "").replace(/\n/g, ""));
			else
				alert("Bei embedpano fehlt: id:'krpanoObject'!");
		}

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »toosten« (5. Dezember 2017, 07:33)


6

Dienstag, 5. Dezember 2017, 20:42

Hallo,

die Variante mit inline JavaScript (action type="Javascript") gefällt mir super.
Habe mein actionscript entsprechend angepasst.

Danke für den Tipp.

Gruß,

Sebastian