Jeg har en komponent, hvor jeg bygger en lightning:recordEditForm
ved hjælp af felter baseret på et andet feltsæt, der ser et ud lidt som dette:
<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>
Når du ringer til find()
på en aura:id
der forekommer flere gange, får du tilbage en matrix af alt med den aura:id
. Hvis jeg ønskede at få adgang til et element i kroppen af et af elementerne, der returneres med mit find()
opkald, kunne jeg gøre det med aura:id
af underelementet som nedenfor, i handleButton
-funktionen?
({ 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") ); <== ? } ); } })
Kommentarer
Svar
Det ser ud til, at dette “nestede fund” (i sig selv) ikke er muligt. Jeg valgte dynamisk at oprette hver lightning:layoutItem
og hver henholdsvis indlejret lightning:inputField
i en init
handler til min komponent. Dette tillod mig at tildele en aura:id
, da jeg oprettede hver enkelt komponent.
Svar
skal du bruge foreach
til lightning:inputField
aura-id, så får du en række inputfelter cmps, gør derefter foreach og få værdier som hvad jeg prøvede under
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") ); <== ? } ); }
Kommentarer
- Dette fungerer i scenarier, hvor brugssagen er nøjagtig den samme som mit eksempel. Desværre (og jeg undskylder, hvis dette var dårlig praksis), er mit eksempel ikke min nøjagtige brugssag. Jeg forsøgte at forenkle det for at finde et svar uden for meget af det nitty gritty.
cmp.find("formItems").find("field").get("v.value");
?cmp.find("formItems")
fordi der vil være flere elementer med denaura:id
.