NEWS
Array mit Funktionsreferenzen in Objekt speichern
-
Ich versuche ein Array mit Funktionsreferenzen in einem Objekt zu speichern, allerdings werden in dem Objekt nur leere Felder angelegt. Muss ich dabei etwas beachten?
function testFnc1() {} function testFnc2() {} createState( 'ActiveRoomsTimeCtrl', { name: 'Räume mit Zeitsteuerung', type: 'array', role:"state"}, function (obj) {prepareArrayRooms()} ); } function prepareArrayRooms() { if(null == getState('ActiveRoomsTimeCtrl').val) { var init = [testFnc1, testFnc2]; setState('ActiveRoomsTimeCtrl', init, true); } }
In der ObjectView wird allerdings nur ein leeres Array angezeigt. Die leeren Felder erhalte ich auch, wenn ich das Objekt wieder auslesen will.
Background: Ich möchte, je nach selektierten Buttons (Räumen) in vis, Funktionen stündlich aufrufen. Dafür möchte ich die Funktionen in ein array ein-/austragen und dieses Array stündlich durchgehen und die Funktionen aufrufen.
schedule("01 * * * *", timerCallback); function timerCallback() { var activeRooms = getState('ActiveRoomsTimeCtrl').val; activeRooms.forEach(function(element) { if (element != 0) { element(); } }); }
-
Ich habe die Ursache für das Problem in der Doku gefunden:
"val - the actual value - can be any type that is JSON-"encodable""
Funktionen sind nicht in JSON codierbar.Ich werde somit eine andere Lösung suchen.
-
Eine einfach Lösung wäre die Funktion als string zu übergeben und dann über
switch(func){ case 'set1': set1(args); break; case 'get1': return get1(); break; }
die entsprechende Funktion aufzurufen.