【问题标题】:Aura root component not handling the application event started from its child (Lightning Component)Aura 根组件未处理从其子级启动的应用程序事件(Lightning 组件)
【发布时间】:2019-09-17 22:45:58
【问题描述】:

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:Horizo​​ntalDraggableNav,使用以下代码:

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>

对这个问题有什么想法或解决方案吗?

【问题讨论】:

  • 这句话是矛盾的
  • 能否也包含您的控制器代码

标签: javascript salesforce salesforce-lightning salesforce-communities salesforce-chatter


【解决方案1】:

这可能是因为您正在使用aura:doneRendering 事件。

该事件已被弃用,documentation 表示使用它可能会影响其他事件。

除非您的组件在独立应用程序中完全隔离运行并且不包含在复杂应用程序中,例如 Lightning Experience 或 Salesforce 移动应用程序,否则容器应用程序可能会多次触发您的事件处理程序。这种行为使得正确处理每个事件变得困难。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-05
    • 2016-06-17
    • 1970-01-01
    • 1970-01-01
    • 2019-08-04
    • 1970-01-01
    相关资源
    最近更新 更多