Er det mulig å “ finne ” en aura: id i en aura: id?

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

  • Noe sånt som cmp.find("formItems").find("field").get("v.value");?
  • Den spesielle linjen kaster en feil, fordi (.. tror jeg ..) jeg må bruk løkken på cmp.find("formItems") fordi det vil være flere elementer med den aura:id.

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.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *