Minulla on vaatimus kutsua lapsiohjaintoiminto vanhemman ohjaimesta aina, kun tapahtuma tapahtuu vanhemman puolella .
esim.
ABC on pääkomponentti ja DCE on alikomponentti, tällä alikomponentilla on Span of Text -tunniste ja X-symboli. kun napsautan x-painiketta, arvo tyhjennetään lapsiohjaimella. ABC-pääkomponentissa on muotoelementti ja alikomponentti on yksi muodoltaan.
Vaatimukseni on tyhjentää tämä alikomponentin arvo, kun napsautetaan vanhemman komponentin painiketta.
tässä on alla näytettävän koodin esimerkki siitä, mitä yritän, koska en voi lähettää todellista koodia tänne
ParentComponent.cmp
<aura:registerEvent name="clrValues" type="c:ClearValues"/> <div> <c:ChildComponent textValue="test"/> <ui:button label="Save"/> <ui:button label="Clear" press="{!c.clear}"/> </div> </aura:component>
ParentController.js
({ clear : function(component, event, helper) { var evtFire = component.getEvent("clrValues"); evtFire.fire(); } })
ClearValues.evt
<aura:event type="APPLICATION" description="Event template" />
ChildComponent.cmp
<aura:component > <aura:handler name="setValues" event="c:ClearValues" action="{!c.clear}"/> <aura:attribute name="textValue" type="String" default="test"/> <div > <ui:inputText label="Expense Name" value="{!v.textValue}" aura:id="input1"/> </div> </aura:component>
ChildController.js
({ clear : function(component, event, helper) { helper.clearValues(component,event); } })
kommentit
- Ellet anna koodia, sen on vaikea auttaa sinua
- Mohit, lisäsi koodin, en voi lähettää alkuperäistä koodiani, mutta olen antanut näytteen, mitä yritin saavuttaa.
vastaus
Lapsikomponentin käsittelijän nimen on vastattava vanhemman komponentin rekisteröityä nimeä. eli alikomponentissa olevan käsittelijän tulee olla seuraava:
<aura:handler name="clrValues" event="c:ClearValues" action="{!c.clear}"/>
–UPDATE –
Mielestäni parempi lähestymistapa vanhempien väliseen viestintään on käyttää <aura:method>
, joka on lueteltu kohdassa salama-asiakirjat ja täällä
Tätä varten sinun on määritettävä menetelmä tällainen lapsikomponentti:
<aura:method name="sampleMethod" action="{!c.clear}" access="PUBLIC">
Sinulla pitäisi olla tunnus, kun viitat sen vanhempaan komponenttiin seuraavasti:
<c:ChildComponent textValue="test" aura:id="cComp"/>
Sitten vanhemman komponentin tyhjentävässä menetelmässä on käytettävä lapsimenetelmää seuraavasti:
var childCmp = component.find("cComp") childCmp.sampleMethod();
kommentit
- Se koskee vain komponenttitason tapahtumaa, ei sovellustapahtumaa.
- hmm että ' totta. En huomannut ', että tämä on sovellustapahtuma. @Raj_SFDC, miksi ' et voi tehdä tapahtumastasi komponenttitapahtumaa?
Vastaa
Sovellustapahtumakäsittelijän ei tulisi sisältää name
-attribuuttia vain event
ja action
-attribuutti riittää, kuten täällä mainittiin .
Näin sovellustapahtuma tulisi käynnistää selkeällä menetelmällä:
({ clear : function(component, event, helper) { $A.get("e.c:clrValues").fire(); } })
Lisätietoja on sovellustapahtumaa käsittelevässä osiossa -dokumentissa .
Kommentit
- Myöskään siinä ei onnistu, oletan, ettemme voi käsitellä vanhemman lapsen tapahtumia. vahvista
- @Raj_SFDC voimme käynnistää sovellustapahtuman vanhemmalta lapselle. sanotessasi, teet väärin. olen päivittänyt vastaukseni, katso sitä.
- Minulla on yksi kysymys täältä ylhäältä [$ A.get (" ec: clrValues ")], miten määritteen arvo saadaan.
- viittaatko tapahtuman parametreihin? jos voit asettaa sen käyttämällä
$A.get("e.c:clrValues").setParams({'message':'test'})
ja käynnistää tapahtuman, niin käsittelijämenetelmässä voit käyttää$A.get("e.c:clrValues").getParam('message')
arvon palauttamiseksi.