Jag har en komponent där jag bygger en lightning:recordEditForm
med hjälp av fält baserade på olika fältuppsättningar som ser lite så här:
<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 till find()
på en aura:id
som inträffar flera gånger, får du tillbaka en matris med allt med den aura:id
. Om jag ville komma åt ett element i kroppen av ett av elementen som returneras med mitt find()
-samtal, kan jag göra det med aura:id
av underelementet som nedan, 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 verkar som att detta ”kapslade fynd” (i sig) inte är möjligt. Jag valde att dynamiskt skapa varje lightning:layoutItem
och vardera, kapslade lightning:inputField
i en init
hanterare för min komponent. Detta gjorde att jag kunde tilldela en aura:id
när jag skapade varje enskild komponent.
Svar
ska du använda foreach
för lightning:inputField
aura-id, då får du en rad inmatningsfält cmps, gör sedan förskott och få värden som det jag försökte nedan
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
- Detta skulle fungera i scenarier där användningsfallet är exakt detsamma som mitt exempel. Tyvärr (och jag ber om ursäkt om detta var dålig praxis), är mitt exempel inte mitt exakta fall. Jag försökte förenkla det för att hitta ett svar utan för mycket av det snuskiga.
cmp.find("formItems").find("field").get("v.value");
?cmp.find("formItems")
eftersom det kommer att finnas flera element med denaura:id
.