Корневой компонент Aura не обрабатывает событие приложения, запущенное его дочерним элементом (компонент Lightning)

Событие приложения Aura запускается успешно, но кажется, что компонент-обработчик не может его прослушать или обработать, и он не вызывает метод действия openFeed. Это компонент, обрабатывающий событие приложения.

    <aura:component controller="ConnectApiCallsController">
    <aura:attribute name="yourfeed" type="PortalFeedWrapper[]" access="public"/>
    <aura:handler name="init" value="{!this}" action="{!c.doInit}" /> 

    <aura:handler event="c:DraggableNavEvent" action="{!c.openFeed}" />
    <aura:handler event="aura:doneRendering" action="{!c.doneRendering}" /> // not working if removing this line

    <div> 
        <div class="feedWrapper slds-scrollable" > 
            <div class="tab">
                <c:HorizontalDraggableNav/> 
            </div>

            <div id="yourFeedTab" class="tabcontent"> 
                <c:YourFeedWrapper feeds="{!v.yourfeed}"/> 
            </div>

            <div id="discussionsByTopicsTab" class="tabcontent">
                <c:DiscussionsByTopicsWrapper />
            </div>

            <!-- PrivateFeeds By THiru-->  
            <div id="privateFeedTab" class="tabcontent">  
                <c:PrivateFeedWrapper isUserInternal="{!v.isInternalUser}"/>   
            </div>
        </div>
    </div>
</aura:component>

Когда я удаляю doneRendering из компонента, то openFeed вызывается нормально, но дело в том, почему для работы должен быть doneRendering? У меня нет метода doneRendering, объявленного на контроллере. Что я делаю не так, что doneRendering должен оставаться там, чтобы он работал? Кроме того, это родительский компонент, в то время как компонент, запускающий событие приложения, - c: HorizontalDraggableNav, используя следующий код:

var appEvent = $A.get("e.c:DraggableNavEvent");
appEvent.setParams({ feedType: e.target.id });
appEvent.fire();

и компонент выглядит следующим образом:

<aura:component>
    <aura:handler name="init" value="{!this}" action="{!c.doInit}" />
    <aura:handler name="render" value="{!this}" action="{!c.onRender}" />
    <aura:attribute name="isLoginUserInternal" type="Boolean" default="false" /> <!-- PrivateFeeds By Thiru--> 
    <aura:registerEvent name="appEvent" type="c:DraggableNavEvent" />

    <div class="grid-container">
        <div class="grid-item main">
            <div class="items" id="items">
                <div class="item" id="yourFeed">Your feed</div>
                <div class="item" id="discussionsByTopics">Discussions by topics</div> 

                <!-- PrivateFeeds By Thiru--> 
                <aura:if isTrue="{!v.isLoginUserInternal}">
                    <div class="item" id="privateFeed">Valmet internal</div> 
                </aura:if>

            </div>
        </div>
    </div>
</aura:component>

Есть идеи или решения по этой проблеме?


comment
Это предложение противоречит: ›Когда я удаляю doneRendering из компонента, то openFeed вызывается нормально, но вопрос в том, почему для того, чтобы он работал, должен быть doneRendering?   -  person TemporaryFix    schedule 18.09.2019
comment
Можете ли вы также включить код вашего контроллера   -  person TemporaryFix    schedule 18.09.2019


Ответы (1)


Это может быть связано с тем, что вы используете событие aura:doneRendering.

Это событие устарело, и в документации говорится об использовании это может повлиять на другие события.

Если ваш компонент не работает в полной изоляции в автономном приложении и не включен в сложные приложения, такие как Lightning Experience или мобильное приложение Salesforce, приложение-контейнер может запускать ваш обработчик событий несколько раз. Такое поведение затрудняет правильную обработку каждого события.

person TemporaryFix    schedule 18.09.2019