2017-03-29 3 views
0

Ich möchte, dass eine Marko.js-Komponente ein Ereignis zusammen mit einem Wert ausgibt. Ich möchte dann, dass die enthaltene Komponente auf das Ereignis wartet und auf den Wert zugreift.Korrekte Art, Werte mit Marko.js zu senden

Ich habe eine einfache Schaltfläche Komponente, die wie folgt aussieht:

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

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

Die enthaltende Komponente wie folgt aussieht dann ...

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

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

Dies funktioniert und protokolliert das Ereignis mit dem Wert korrekt. Allerdings bin ich ein wenig verwirrt, als ich die Syntax in dem Behälter erwarten würde die übergebenen Argumente in dem Ereignis-Listener zu verweisen ... so ...

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

jedoch, dass dann aus Spuren ein leeres Objekt. Wenn ich eine Zeichenfolge als Argument verwende, dass die Zeichenfolge protokolliert wird, überschreibt sie das ursprüngliche Datenargument, das vom Emitter übergeben wurde.

Ist dies das beabsichtigte Verhalten?

Antwort

1

das Vorliegende folgenden und Weiterbildung mit Ihrem Beispiel:

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> 

Die Ausgabe werden die folgenden auf buttonClicked emittiert:

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

Zusätzliche Argumente, die nach dem Methodennamen für einen Event-Handler übergeben werden zu Beginn der Argumente an die Event-Handler-Methode übergeben werden. Siehe: http://markojs.com/docs/components/#codeon-eventmethodname-argscode

Side Hinweis: Dies sollte das Verhalten von Function.prototype.bind

widerzuspiegeln Es sei denn, zusätzliche Daten gibt es, dass Sie Ihre Event-Handler-Methode zu übergeben wollten (Daten, die nicht zur Verfügung gestellt wurde, als this.emit() genannt wurde), dann Es ist nicht notwendig, zusätzliche Argumente zu binden.

Hoffe, dass Ihre Frage beantwortet.

Verwandte Themen