Jeg har en komponent der jeg bygger en lightning:recordEditForm
ved hjelp av felt basert på et annet feltsett som ser litt 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
som skjer flere ganger, får du tilbake en matrise med alt med det aura:id
. Hvis jeg ønsket å få tilgang til et element i kroppen til et av elementene som returneres med find()
samtalen, kan jeg gjøre det med aura:id
av nevnte underelement som nedenfor, i handleButton
-funksjonen?
({ 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 ut til at dette «nestede funnet» (i seg selv) ikke er mulig. Jeg valgte å opprette dynamisk hver lightning:layoutItem
og hver, nestet lightning:inputField
i en init
behandler for komponenten min. Dette tillot meg å tilordne en aura:id
når jeg opprettet hver enkelt komponent.
Svar
bør du bruke foreach
for lightning:inputField
aura-id, så får du en rekke inputfelt cmps og gjør deretter foreach og får verdier som det jeg prøvde 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 der brukssaken er nøyaktig den samme som eksemplet mitt. Dessverre (og jeg beklager om dette var dårlig praksis), er ikke mitt eksempel min eksakte brukssak. Jeg prøvde å forenkle det for å finne et svar uten for mye av det nitty gritty.
cmp.find("formItems").find("field").get("v.value");
?cmp.find("formItems")
fordi det vil være flere elementer med denaura:id
.