Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Object

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Object

    This topic has been deleted. Only users with topic management privileges can see it.
    • T
      Tefi last edited by

      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);
          })
      }
      
      1 Reply Last reply Reply Quote 0
      • AlCalzone
        AlCalzone Developer last edited by

        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);
            })
        }
        
        1 Reply Last reply Reply Quote 0
        • AlCalzone
          AlCalzone Developer last edited by

          Für Details warum und wieso kannst du zB hier weiterlesen:

          https://developer.mozilla.org/de/docs/W … funktionen

          1 Reply Last reply Reply Quote 0
          • T
            Tefi last edited by

            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+'----->');
             })
            
            1 Reply Last reply Reply Quote 0
            • AlCalzone
              AlCalzone Developer last edited by

              @Tefi:

               $({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+'----->');
              })
              
              1 Reply Last reply Reply Quote 0
              • T
                Tefi last edited by

                Besten Dank, klappt

                1 Reply Last reply Reply Quote 0
                • T
                  Tefi last edited by

                  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) => {
                  } );
                  
                  1 Reply Last reply Reply Quote 0
                  • paul53
                    paul53 last edited by

                    @Tefi:

                    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).

                    1 Reply Last reply Reply Quote 0
                    • First post
                      Last post

                    Support us

                    ioBroker
                    Community Adapters
                    Donate

                    719
                    Online

                    31.7k
                    Users

                    79.9k
                    Topics

                    1.3m
                    Posts

                    3
                    8
                    1039
                    Loading More Posts
                    • Oldest to Newest
                    • Newest to Oldest
                    • Most Votes
                    Reply
                    • Reply as topic
                    Log in to reply
                    Community
                    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                    The ioBroker Community 2014-2023
                    logo