Er det muligt at “ finde ” en aura: id i en aura: id?

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

  • Noget som cmp.find("formItems").find("field").get("v.value");?
  • Den bestemte linje kaster en fejl, fordi (.. jeg tror ..) Jeg har brug for brug sløjfen på cmp.find("formItems") fordi der vil være flere elementer med den aura:id.

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.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *