Är det möjligt att “ hitta ” en aura: id i en aura: id?

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

  • Något som cmp.find("formItems").find("field").get("v.value");?
  • Den specifika raden ger ett fel, för (.. tror jag ..) Jag måste använd slingan på cmp.find("formItems") eftersom det kommer att finnas flera element med den aura:id.

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.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *