Polymère 1.0: Comment passer d'un argument à un Polymère à fonction d'un attribut?
Est-il un moyen de passer un argument à un Polymère à fonction d'un attribut d'élément à l'intérieur de son <template>
?
<script src="http://www.polymer-project.org/1.0/samples/components/webcomponentsjs/webcomponents-lite.js"></script>
<link rel="import" href="http://www.polymer-project.org/1.0/samples/components/polymer/polymer.html" />
<dom-module id="example-element">
<template>
...
<paper-button id="foo" on-tap="bar">Click</paper-button>
...
</template>
</dom-module>
<script>
(function() {
Polymer({
is: 'example-element',
properties: {...},
bar: function(arg){
//Do stuff using argument arg
}
});
})();
</script>
Arrière-Plan De La Recherche
J'ai passé au peigne fin la documentation qui apparaît silencieux sur la question. Cela ne veut pas dire que vous pouvez ou ne pouvez pas. Mais quand je l'ai essayer, il échoue. Mais peut-être que je ne suis pas le faire correctement. Donc j'ai besoin d'aide.
La seule chose que j'ai rencontré est les écouteurs d'événement qui ne semble pas être en mesure de prendre les arguments que je veux passer. Dire, un id
ou un name
.
Précédentes Tentatives
J'ai essayé (sans succès) en faisant des choses comme:
<paper-button id="foo" on-tap="bar('foo')"> Click </paper-button>
mais rien ne semble fonctionner.
Les écouteurs d'événement idée ne fonctionne pas parce qu'ils limitent les arguments et je ne peux pas obtenir de la, dire, id
j'ai besoin.
- Un associé dit: Toujours une chaîne de caractères comme dans votre exemple? Vous pourriez faire quelque chose comme
on-tap="bar" data-bar="foo"
, puis dans votre gestionnaire d'événements,e.srcElement.getAttribute('data-bar')
. Vous ne pouvez pas passer un argument comme vous avez essayé de faire.
Vous devez vous connecter pour publier un commentaire.
Vous pourriez utiliser HTML5 attributs de données à la place. Essayez comme ceci:
Polymer.dom(e).path[2].getAttribute('data-args')
. Voir ici: polymer-project.org/1.0/docs/devguide/events.html#retargeting Réponse acceptée!e.target.dataset.args
a travaillé pour moi et me regarde d'un peu plus propre.dataset
de la propriété et de le faire comme je l'ai fait, vous obtenez une meilleure compatibilité descendante.Après la recherche d'un lot, j'ai trouvé ce que je pense est la meilleure solution possible.
Si le papier-bouton est à l'intérieur d'un modèle, par exemple
Alors les propriétés peuvent être accessibles via le "modèle" de la propriété dans l'objet d'événement transmis à la fonction.
item.task
, ce qui netask
signifie? Ne pouvais pas le trouver dans le modèle mentionné ci-dessus.Brille plus de lumière sur une différence subtile mentionné dans les commentaires ci-dessus.
Avis
$=
doit être utilisé si la lecture d'une liaison de données.À l'intérieur de
dom-repeat
, leitem
(ou quel que soit le nom que vous lui donnez) est disponible àe.model.item
.Est-il un moyen de passer un argument à un Polymère à fonction d'un attribut d'un élément à l'intérieur de son
<template>
.Au lieu d'utiliser un événement utiliser un calculée de liaison. Calculé liaisons peuvent accepter des chaînes de caractères littérales.
La caisse de l'exemple ci-dessous. Dans cet exemple, un bouton peut être caché en fonction du paramètre qui est passé.
HTML:
Remarque: Vous pouvez obtenir le
id
ou d'autres attributs d'un élément d'un événement est exécuté parevent.target
. Si vous cherchez d'autres attributs que les paramètres de ce pourrait également être une solution valable.Après avoir essayé les solutions proposées ici, qui n'a pas fonctionné, j'ai fait une légère modification de @Amit et @Mowzer solutions je l'ai eu à travailler comme cela:
Juste maintenant, je suis à ce travail:
Peut-être le plus robuste de manière à récupérer l'argument est comme suit:
Selon la situation, le propre façon de le faire est généralement à l'aide d' dom-répéter. Si vous pouvez mettre en forme vos données dans un tableau d'objets, vous pouvez simplement utiliser l'e.modèle pour tout.