[dss-developer] Problem bei der Parameterübergabe

Sebastian Scholz digitalstrom at sunshine-studios.org
Wed Dec 21 13:33:39 CET 2011


Hallo Manu

Ja das füht in der Tat zu Problemen. Die zusätzlichen Parameter bei Events
sind immer Strings. Es gibt deswegen keine Probleme, wenn du einen
Zahlenwert erwartetst. Wenn du allerdings komplexere Objekte (wie z.B.
Arrays) übergeben willst, werden diese auch als String umgewandelt. Kurzes
Beispiel:

var array = [1, 2, 3];

sieht als String formatiert so aus:

1, 2, 3

Das wird auch dem als Parameter an das Event angehängt. Um daraus wieder
ein gültiges Array zu erhalten muss man vorne und hinten noch eine eckige
Klammer anhängen:

'[' + 1, 2, 3' + ']'

Den String kann man dann per eval wieder auswerten und erhält das
ursprüngliche Array zurück. Das funktioniert aber nur in diesem Fall.
Ausserdem sollte man die eval() Methode nicht verwenden, weil dadurch auch
fehlerhafter Code ausgeführt werden kann (Sicherheitslücke oder
Programmabsturz wäre möglich). Besser ist es, wie schon in der letzten Mail
gesagt, JSON-formatierte Strings zur Übergabe zu verwenden. Code und
Beispiele gibt es unter [1]. Im Prinip musst du nur den Code in deine
JavaScript Datei kopieren. Dann sollte folgendes funktionieren:

var arrayBefore = [1, 2, 3];
var jsonString = JSON.stringify(arrayBefore);
var arrayAfter = JSON.parse(jsonString);


Du würdest also den JSON-String als Parameter übergeben und später mit
JSON.parse() das Array wieder bekommen.


Hoffentlich hilft das ein bisschen weiter.

Gruss
Sebastian


[1] https://github.com/douglascrockford/JSON-js/blob/master/json2.js

On Wed, 21 Dec 2011 13:09:47 +0100, Manuel Saxer <manuel.saxer at me.com>
wrote:
> Antwort auf dss-developer Digest, Vol 23, Issue 8
> 
> Hallo Christian
> 
> Vielen Dank für die guten Inputs. Die Parameterübergabe funktioniert
> soweit ganz gut. 
> Jedoch nur mit einfachen Zahlen-Werten. Wenn ich beispielsweise die
> device.name oder 
> die device.dsid übergeben möchte kommt eine Fehlermeldung:
> 
> ****************
> [2011-12-21 12:55:24][Error][System]
> EventInterpreterPluginJavascript::handleEvent:Caught 
> event while running/parsing script '../data/block_device.js'. Message:
> Caught Exception while 
> executing script: SyntaxError: missing ] after element list
> ****************
> 
> Lassen sich nur einfache Parameter übergeben oder muss hier ggf. der
> Syntax angepasst werden?
> Der Aufruf der Parameter führe ich jeweils wie folgt auf
> 
> ****************
> var parameter = eval('['+raisedEvent.parameter.deviceId+']');
> ****************
> 
> Vielen Dank für die Hilfe
> 
> Gruss Manu


More information about the dss-developer mailing list