2017-03-29 5 views
0

Je veux qu'un composant Marko.js émette un événement avec une valeur, je veux ensuite que le composant contenant écoute l'événement et accède à la valeur.Manière correcte d'émettre de la valeur avec Marko.js

J'ai un composant simple bouton qui ressemble à ceci:

class { 
 
    doSomething() { 
 
     this.emit('buttonClicked', {someValue:'10'}); 
 
    } 
 
} 
 

 
<button.example-button on-click('doSomething')>Click me!</button>

Le composant contenant ressemble alors à ceci ...

class { 
 
\t onButtonClicked(data){ 
 
\t \t console.log("I heard event:" + data.someValue); 
 
\t } 
 
} 
 

 
<div class="button-manager"> 
 
    <my-button on-buttonClicked('onButtonClicked') /> 
 
</div>

Cela fonctionne et enregistre correctement l'événement avec la valeur. Cependant, je suis un peu confus que je me attends à la syntaxe dans le conteneur pour référencer les arguments transmis dans l'écouteur d'événement ... comme ça ...

<div class="button-manager"> 
 
    <my-button on-buttonClicked('onButtonClicked', data) /> 
 
</div>

Cependant que des traces ensuite un objet vide. Si je mets une chaîne comme argument, cette chaîne est enregistrée et écrase l'argument de données d'origine transmis par l'émetteur.

Est-ce le comportement souhaité?

Répondre

1

Compte tenu de ce qui suit et continue avec votre exemple:

class { 
    onButtonClicked(foo, bar, eventArg){ 
     console.log('foo:', foo); 
     console.log('bar:', bar); 
     console.log('eventArg:', eventArg); 
    } 
} 

$ var foo = 'foo'; 
$ var bar = 'bar'; 

<div class="button-manager"> 
    <my-button on-buttonClicked('onButtonClicked', foo, bar) /> 
</div> 

La sortie sera le suivant sur buttonClicked est émise:

foo: foo 
bar: bar 
eventArg: { someValue: 10 } 

arguments supplémentaires passés après le nom de la méthode pour un gestionnaire d'événement être passé à la méthode du gestionnaire d'événements au début des arguments. Voir: http://markojs.com/docs/components/#codeon-eventmethodname-argscode

Side note: c'était destiné à refléter le comportement des Function.prototype.bind

À moins qu'il y avait des données supplémentaires que vous vouliez passer à votre méthode de gestionnaire d'événements (données qui n'a pas été fourni lorsque this.emit() a été appelé) puis il n'est pas nécessaire de lier des arguments supplémentaires.

Hope qui répond à votre question.