2016-02-09 3 views
0

У меня возникли проблемы, связанные с вложенным компонентом. Я хотел бы, чтобы компонент мог запускать метод в контроллере controller.js (или помощнике) вложенных компонентов. Я пробовал оба события и через и не повезло. Вот пример разметки:Aura.js Компоненты молнии: запуск методов вложенного/дочернего компонента из супер/родительского компонента?

<!-- myEvent.evt --> 
<aura:event type="APPLICATION"> 
</aura:event> 

<!-- super-component --> 
<aura:component> 
    <aura:registerEvent name="myEventName" type="c:myEvent"/> 
    <c:my_Nested_Component /> 
    <ui:button press="{!fireEvent}" 
<aura:component> 



//super-component_controller.js 
({ 
    fireEvent: function(component){ 
    var myEvent = component.getEvent("myEventName"); 
    myEvent.fire(); 
    console.log('event fired'); 
    } 
}) 

------------------------------------------ 

<!-- nested-component --> 
<aura:component> 
    <aura:handler name="myEventName" event="c:c:myEvent" action="{!c.gotEvent}" /> 

<aura:component> 


//nested-component_controller.js 
({ 
    gotEvent: function(component, event){ 
    console.log('received event!'); 
    } 
}) 

Это не работает. Я попробовал тот же самый точный код, который я разместил на вложенном компоненте на супер-суперкомпоненте, и он отлично работал. Супер-супер-компонент получил событие. Но вложенный компонент не способен. Я полагал, что это связано с событиями, которые только пузырятся (хотя в документации говорится, что это касается только событий Component, а не событий приложений).

Так что другой вариант, который я читаю в Интернете, используется. Я попытался сделать это, но это тоже не помогло говорить с вложенным компонентом.

Как родительский компонент может вызвать метод по вложенному компоненту?

Спасибо

ответ

0

Этот вопрос был дан ответ здесь: https://salesforce.stackexchange.com/questions/108544/lightning-components-firing-a-nested-child-components-methods-from-the-super-p

Проблема заключалась в том, что я использовал component.getEvent() вместо $ A.get(), которая необходима для проведения мероприятий любого уровня приложений. Кроме того, имя зарегистрированного события не так, как сослаться на событие от обработчика, а используя его фактическое имя файла, например, так:

//super-component_controller.js 
({ 
    fireEvent: function(component){ 
    var myEvent = $A.get("e.c:myEvent"); 
    myEvent.fire(); 
    console.log('event fired'); 
    } 
}) 

<!-- nested-component --> 
<aura:component> 
    <aura:handler event="c:myEvent" action="{!c.gotEvent}" /> 
<aura:component> 

Спасибо @MohithShrivastava для выяснения это один из!