0

ネストされたコンポーネントとの通信に問題があります。コンポーネントがネストされたコンポーネントの controller.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!');
  }
})

これは動作しません。スーパースーパーコンポーネントのネストされたコンポーネントに配置したのとまったく同じコードを試してみたところ、完全に機能しました.スーパースーパーコンポーネントはイベントを受け取りました. しかし、ネストされたコンポーネントはできません。これは、イベントのみが発生することに関係していると考えました (ただし、ドキュメントには、アプリケーション イベントではなく、コンポーネント イベントの場合のみであると記載されています)。

したがって、私がオンラインで読んだ他のオプションは、を使用しています。これをやってみましたが、これもネストされたコンポーネントと話すには機能しませんでした。

親コンポーネントは、ネストされたコンポーネントのメソッドをどのように起動させることができますか?

ありがとうございました

4

1 に答える 1

0

この問題はここで回答されました: https://salesforce.stackexchange.com/questions/108544/lightning-components-firing-a-nested-child-components-methods-from-the-super-p

問題は、アプリケーション レベルのイベントに必要な $A.get() の代わりに component.getEvent() を使用していたことです。さらに、登録されたイベントの名前は、ハンドラーからイベントを参照する方法ではなく、次のように実際のファイル名を使用します。

//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に感謝します!

于 2016-02-10T00:33:35.327 に答える