2015-07-06 16 views
9

Ich frage mich, ob es möglich war, eine Funktion foo() als Attribut func="foo()" zu übergeben und es innerhalb des Polymerelements this.func() genannt haben?Eine Funktion als Attributwert übergeben

<foo-bar func="foo()"></foo-bar> 


Polymer({ 
    is: 'foo-bar', 
    properties: { 
    func: Object, 
    }, 
    ready: function() { 
    this.func(); 
    } 
}); 

Ich habe versucht, diese Arbeit für Jahrhunderte ohne Glück zu bekommen.

Vielen Dank im Voraus.

+0

Also definiert Ihr Elternelement die Funktion 'foo' und Ihr Kindelement (' foo-bar') versucht es aufzurufen? –

+0

@BenThomas gibt nur eine Funktion als Attributwert weiter. Wir nehmen zur Vereinfachung einfach an, dass im HTML-Dokument so aussieht. In diesem Fall gibt es kein übergeordnetes Element. –

+0

Es gibt [mehr Antworten auf diese Frage hier] (https://stackoverflow.com/q/31441401/1640892). ... https://stackoverflow.com/q/31441401/1640892 – Mowzer

Antwort

2

Der Trick ist, dass "foo()" eine Zeichenfolge ist, wenn Sie es zuerst an das Polymer-Element übergeben. Ich habe auch eine ganze Weile damit gekämpft und das ist der einzige Weg, wie ich es finden könnte. Diese Lösung erstellt eine Funktion, die Ihren Funktionsaufruf zurückgibt, den Sie als den Wert einer Ihrer Polymerelementeigenschaften zuweisen.

Manche Leute sagen vielleicht, dass Sie den Konstruktor Function nicht benutzen sollten, weil er eval() ähnelt und ... naja, wissen Sie, das ganze Eval ist böse Sache. Aber wenn Sie es nur verwenden, um einen Aufruf an eine andere Funktion zurückzugeben, und Sie die Auswirkungen des Umfangs verstehen, dann könnte dies ein geeigneter Anwendungsfall sein. Wenn ich falsch liege, bin ich mir sicher, dass uns jemand darüber informieren wird!

Hier ist ein Link zu einem schönen SO über die Unterschiede zwischen eval beantworten() und der Funktion Konstruktor in Fall kann es helfen: https://stackoverflow.com/a/4599946/2629361

Schließlich Ich habe dies im Fall ‚‘ angebrachten Lebenszyklus auf die zu sein sichere Seite, weil es später als "fertig" auftritt. Ich bin mir nicht sicher, ob ein früherer Lebenszyklus-Event oder 'ready' anstelle von 'attached' verwendet werden könnte. Vielleicht kann jemand diese Antwort verbessern und uns wissen lassen.

+1

Der Funktionskonstruktor funktioniert immer noch sehr ähnlich wie eval(), aber trotzdem bin ich mir ziemlich sicher, dass Ihr Vorschlag die einzige Möglichkeit ist, eine Funktion zu übergeben als ein Attribut. Ich werde wahrscheinlich diese Idee aufgrund der CSP-Standardeinschränkungen aufgeben und was nicht. –

Verwandte Themen