2016-11-17 2 views
0

Ich habe eine solche Komponente:Emberjs 1.13.0-Call-Aktion der Komponente

App.MyNiceComponent = Ember.component.extend({ 
    actions: { 
    save: function() { … } 
    } 
}); 

Die Vorlage für sie:

<h1>My Nice Component</h1> 
{{ yield this }} 

Überall in einer anderen Vorlage:

{{#my-nice as |mn| }} 
    … 
    <a onclick={{ action 'save' }}>Save</save> 
{{/my-nice}} 

Ein Klick auf dem Link make Ember versuchen, die Aktion im Routen-Controller auszulösen. Ich schätze, das liegt daran, dass die Version, die wir hier verwenden, so alt ist, aber gibt es irgendeine Möglichkeit, Ember die Komponenten Action nennen zu lassen oder einfach einen Funktionsverweis an den Link zu übergeben, damit dieser aufgerufen wird?

In einer weiteren Komponente, die bestimmte untergeordnete Komponenten so entworfen wird, könnte ich es schaffe es, wie dies zu tun:

{{#my-nice}} 
    {{#a-child task="do this"}} 
{{/my-nice}} 

In dieser:

App.AChildComponent = Ember.Component.extend({ 
    targetObject: Em.computed.alias('parentView'), 
    task: '', 
    action: 'onChildClick', //present as Action in the parent Compoent 

    click: function(){ 
    this.sendAction('action', this.get('task')); 
    } 
}) 

In hbs dies so aussehen würde Fall würde ich wirklich gerne Ember auslösen die Komponenten Aktionen, ohne den Weg über den Controller ...

Vielen Dank im Voraus.

+0

könnten Sie meine Antwort akzeptieren? Es wird anderen helfen – maheshiv

Antwort

1

@philipp, Sie können den Aktionshelfer verwenden, um die Aktion von der Komponente an eine beliebige Stelle zu übergeben (übergeben Sie als weiteren Parameter yield). Zum Beispiel: - In Ihrem Fall <h1>My Nice Component</h1> {{yield (action "save")}}

{{#my-nice as |saveAction| }} 
… 
<a onclick={{ action saveAction }}>Save</save> 
{{/my-nice}} 
Verwandte Themen