2016-10-18 1 views
0

So zu arbeiten Ich versuche, einige Polymer-Datenbindung zu erhalten, aber aus irgendeinem Grund die folgenden Code gibt mir ein TypeError: this.setAttribute is not a function(…)Polymer: this.setAttribute() ist keine Funktion

Ich habe versucht this.setAttribute('display', 1); mit this.display = 1; ersetzt aber das scheint auch nicht zu funktionieren.

Was mache ich falsch?

Polymer({ 
    is: 'unibz-club', 

    properties: { 
    display:{ 
     type: Number, 
     notify: true, 
     value: 0, 
    } 
    }, 
    ready: function() { 
    this.setAttribute('display', 1); // <--not working 
    }.bind(this), 
}; 
+1

Nun, eine Sache zu beachten ist, dass Sie eine schließende Klammer vor dem Ende Semikolon fehlt. – Jbird

+1

Warum verbindest du explizit "das"? Ich glaube, die "ready" -Methode hat bereits einen solchen Kontext, der sich auf das instanziierte Polymer-Objekt bezieht. Im Moment ändern Sie wahrscheinlich den Kontext in das Fenster oder enthalten den Abschluss. – Jbird

+0

Sorry, die Klammern sind in meinem Code geschlossen, aber der Tipp mit dem Binding "this" hat es geschafft! Kannst du mir erklären, wenn ich "dieses" binden muss und wenn nicht? Ich kann nicht scheinen, eine gute Erklärung zu finden ... – Raspel

Antwort

0

Die ‚ready‘ Methode hat bereits einen this Kontext, instanziiert das Polymer Objekt verweist wird. Im Moment ändern Sie den Kontext in das Fenster oder enthalten den Abschluss mit dem Aufruf .bind(this).

Die Polymerbibliothek verarbeitet dies für Sie. Es ruft die Methode 'ready' im Kontext des neu erstellten Objekts auf.

Normalerweise würden Sie .bind() verwenden, um den Kontext von this in Callback-Methoden und then-table Versprechungen zu definieren. Es gibt natürlich andere Anwendungen, aber das ist in meiner Erfahrung am üblichsten.

function ImageLoader() { 
    return this; 
} 

ImageLoader.prototype.load = function(path) { 
    return ajaxService.get(path);  
}; 

function Gallery() { 
    this.images = []; 
    return this; 
} 

Gallery.prototype.init = function() { 
    new ImageLoader().load('/photos/gallery').then(function(result) { 
     this.images = result; 
    }.bind(this)); // <-- .bind(this) will set the context of `this` to the Gallery instance 
}; 

var gallery = new Gallery(); 
gallery.init(); 
+0

Danke! Das hat mir sehr geholfen! – Raspel