Ik heb een component waarbij ik een lightning:recordEditForm
bouw met behulp van velden die zijn gebaseerd op verschillende veldsets die eruit zien als iets dergelijks:
<aura:component> <aura:attribute name="fieldApiNames" type="List" /> <aura:attribute name="showSpinner" type="Boolean" default="true" /> <aura:if isTrue="{!v.showSpinner}"> <lightning:spinner alternativeText="Loading..." /> </aura:if> <lightning:recordEditForm onload="{!c.handleLoad}" objectApiName="Account"> <lightning:messages /> <lightning:layout multipleRows="true"> <aura:iteration items="{!v.fieldApiNames}" var="api"> <lightning:layoutItem aura:id="formItems" size="6"> <div aura:id="top-div" /> <lightning:inputField aura:id="field" fieldName="{!api}" /> <div aura:id="bottom-div" /> </lightning:layoutItem> </aura:iteration> </lightning:layout> </lightning:recordEditForm> <lightning:button title="Show Field Values" onclick="{!c.handleButton}" /> </aura:component>
Wanneer u find()
aanroept op een aura:id
die meerdere keren voorkomt, krijg je een array van alles terug met die aura:id
. Als ik toegang zou willen krijgen tot een element in de body van een van de elementen die zijn geretourneerd met mijn find()
aanroep, zou ik dat dan kunnen doen met de aura:id
van genoemd subelement zoals hieronder, in de handleButton
functie?
({ handleLoad : function(cmp, evt, helper) { cmp.set( "v.showSpinner", false ); }, handleButton : function(cmp, evt, helper) { var first = cmp.get("v.fieldApiNames")[0]; cmp.find("formItems").forEach( function(item) { alert( item.find("field").get("v.value") ); <== ? } ); } })
Reacties
Answer
Het lijkt erop dat deze “geneste vondst” (per se) niet mogelijk is. Ik heb ervoor gekozen om elk lightning:layoutItem
en elk, respectievelijk, lightning:inputField
in een init
genest handler voor mijn component. Hierdoor kon ik een aura:id
toewijzen terwijl ik elk afzonderlijk onderdeel creëerde.
Antwoord
je zou foreach
voor lightning:inputField
aura id moeten gebruiken, dan krijg je een array van inputfields cmps, doe dan foreach en krijg waarden zoals wat ik probeerde hieronder
controller.js
handleButton : function(cmp, evt, helper) { var first = cmp.get("v.fieldApiNames")[0]; cmp.find("field").forEach( function(itemcmp) { alert( itemcmp.get("v.value") ); <== ? } ); }
Opmerkingen
- Dit zou werken in scenarios waarin het gebruik precies hetzelfde is als in mijn voorbeeld. Helaas (en ik bied mijn excuses aan als dit een slechte gewoonte was), is mijn voorbeeld niet mijn exacte use-case. Ik probeerde het te vereenvoudigen om een antwoord te vinden zonder al te veel van de details.
cmp.find("formItems").find("field").get("v.value");
?cmp.find("formItems")
omdat er meerdere elementen met dieaura:id
zullen zijn.