NEWS
Object
-
Hallo zusammen
Ich habe folgenden kleine Test geschrieben und ein Object definiert. Darin enthalten ist die Eigenschaft Name.
In der Function im on Bereich möchte ich auf diese Eigenschaft zugreifen, erhalte aber ein undefined. Wie muss ich das schreiben, dass es klappt.
function test (obj) { this.Name = obj.name; log(this.Name); // ----- motions -------------------------------- $('state(this.Name+'.motions")[state.id=*.active]').on(function(obj) { log(this.Name); log(obj.Name); }) }
-
Variante 1 (modernes JavaScript) => Verwende arrow-functions als Callback statt dem klassischen function-Konstrukt:
Vorher:
$('state(this.Name+'.motions")[state.id=*.active]').on(function(obj) { // Der Wert von this hängt davon ab, was der Aufrufer des Callbacks als Kontext wählt log(this.Name); log(obj.Name); })
Nachher:
$('state(this.Name+'.motions")[state.id=*.active]').on((obj) => { // Der Wert von this entspricht dem in der umgebenden Funktion log(this.Name); log(obj.Name); })
Variante 2 => merke dir den Wert von this in einer Hilfsvariablen:
function test (obj) { const that = this; // that ist Hilfsvariable this.Name = obj.name; log(this.Name); // ----- motions -------------------------------- $('state(this.Name+'.motions")[state.id=*.active]').on(function(obj) { log(that.Name); // <= !!! log(obj.Name); }) }
-
Für Details warum und wieso kannst du zB hier weiterlesen:
-
Besten Dank, das hat top geklappt.
Ich hätte da noch eine Frage. In einem Object habe ich folgenden Eventhandler laufen, welcher aber interessanterweise durch alle Datenpunkt sämlicher Adapter durch geht. Was ist hier falsch?
$({id: 'javascript.0.roomcontroller.küche.Scene', change:'any', fromNe:'system.adapter.javascript.0'}).on((obj) => { log(obj.state.from+'----->'); })
-
$({id: 'javascript.0.roomcontroller.küche.Scene', change:'any', fromNe:'system.adapter.javascript.0'}).on((obj) => { log(obj.state.from+'----->'); }) ```` `
Du vermixt die Syntax der $- und on-Funktion:
on({id: 'javascript.0.roomcontroller.küche.Scene', change:'any', fromNe:'system.adapter.javascript.0'}, (obj) => { log(obj.state.from+'----->'); })
-
Besten Dank, klappt
-
Bei einem ENUM möchte ich nur die Objekte "obj.state.val=true".
Lässt sich das nun schon im subscribe angeben?
$('state(functions=Bewegung)[state.id=*.active]').on( (obj) => { } );
-
Bei einem ENUM möchte ich nur die Objekte "obj.state.val=true".
Lässt sich das nun schon im subscribe angeben? `
Das dürfte bei einem https://github.com/ioBroker/ioBroker.javascript/blob/master/doc/en/javascript.md#–-selector nicht möglich sein. Da bleibt nur die Abfrage if(obj.state.val).