2017-09-08 4 views
0

J'essaie de définir une action personnalisée pour mon composant Ember & Je veux communiquer entre parent/enfant.Ember ajouter une action au modèle pour la communication parent/enfant

Dans mes-child.js, je

actions: { 
    someCustomAction: function() { 
     let self = this; 
     self.sendAction('someCustomAction'); 
    }, 
} 

Et je prends la même chose dans mes-parent.js comme ci-dessous;

actions: { 
    someCustomAction: function(){ 
     console.log("Inside someCustomAction...."); 
    }  
} 

Maintenant, avec le code ci-dessus, le contrôle/l'action ne vient pas à mes-parent.js

Je dois ajouter "someCustomAction" au modèle ci-dessous

Dans mon-parent .hbs

{{my-child someCustomAction="someCustomAction"}} 

Je voulais savoir la raison exacte de la même chose. Pourquoi est-ce que faire simplement sendAction ne fonctionne pas automatiquement?

Répondre

1

Voici comment je procéderais à ce sujet tout en suivant le modèle de données vers le bas, actions vers le haut (DDAU). Tout d'abord, vous passez l'action que vous souhaitez déclencher dans votre enfant en utilisant le action helper.

{{my-child someActionName=(action 'parentAction')}}

Ensuite, vous retreive l'action et le feu depuis le composant enfant.

this.get('someActionName')(params);

Ember Twiddle Complete Example

+0

Est-ce que l'on qualifie un composant de «parent» ou «enfant» uniquement en fonction de la façon dont ils sont définis dans le modèle? comme si A.hbs contient/a référence à B, alors A est parent et B est enfant? – testndtv

+1

C'est exact. @testndtv – BrandonW

1

Ceci est parce que les composants ne sont pas au courant contextuellement. Les actions doivent donc être liées manuellement. Mais cela vous donne également la possibilité d'envoyer différentes actions sur le même composant et même des arguments supplémentaires.

Les composants sont isolés de leur environnement, de sorte que toutes les données que les besoins composant doit être transmis dans. https://guides.emberjs.com/v2.15.0/components/passing-properties-to-a-component/

Si le composant est vraiment isolé, les actions sont aussi bien. https://guides.emberjs.com/v2.15.0/components/triggering-changes-with-actions/#toc_passing-the-action-to-the-component

+0

Cela s'appliquerait donc aussi aux actions (et pas seulement aux attributs purs de classe/composant) – testndtv