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); }) } -
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+'----->'); }) -
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).
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden