<foo-bar func="foo()"></foo-bar>
Polymer({
is: 'foo-bar',
properties: {
func: {
type: String, // the function call is passed in as a string
notify: true
},
attached: function() {
if (this.func) {
this.callFunc = new Function('return '+ this.func);
this.callFunc(); // can now be called here or elsewhere in the Polymer object
}
});
Sztuczka polega na tym, że "foo()" jest ciągiem, gdy najpierw przekazujesz go do elementu Polymer. Walczyłem z tym przez jakiś czas i jest to jedyny sposób, jaki mogłem znaleźć, aby to zrobić. To rozwiązanie tworzy funkcję, która zwraca twoje wywołanie funkcji, które przypisujesz jako wartość jednej z własności twojego polimeru.
Niektórzy ludzie mogą powiedzieć, że nie powinieneś używać konstruktora Function, ponieważ jest podobny do eval() i ... no cóż, wiesz, cała sprawa "eval is evil". Ale jeśli po prostu używasz go, aby oddzwonić do innej funkcji i rozumiesz znaczenie tego zakresu, myślę, że to może być odpowiedni przypadek użycia. Jeśli się mylę, na pewno ktoś nas o tym powiadomi!
Oto link do miłym SO odpowiedzieć na temat różnic między eval() i konstruktora funkcji w przypadku może pomóc: https://stackoverflow.com/a/4599946/2629361
Wreszcie kładę to w „dołączonym” imprezy cyklem życia być na bezpieczna strona, ponieważ występuje później niż "gotowa". Nie jestem pewien, czy można użyć wcześniejszego cyklu życia lub "gotowego" zamiast "załączonego". Być może ktoś może poprawić tę odpowiedź i dać nam znać.
Twój rodzicielski element definiuje funkcję 'foo' i twój element podrzędny (' foo-bar') próbuje ją wywołać? –
@BenThomas przekazuje tylko funkcję jako wartość atrybutu. Przyjmiemy po prostu dla prostoty, że pojawia się w dokumentach HTML. W tym przypadku nie ma elementu rodzica. –
Istnieje [więcej odpowiedzi na to pytanie tutaj] (https://stackoverflow.com/q/31441401/1640892). ... https://stackoverflow.com/q/31441401/1640892 – Mowzer