È possibile “ trovare ” un aura: id allinterno di un aura: id?

Ho un componente in cui sto creando un lightning:recordEditForm utilizzando campi basati su un diverso set di campi che sembra un qualcosa del genere:

<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> 

Quando chiami find() su un aura:id che si verifica più volte, ottieni un array di tutto ciò con quel aura:id. Se volessi accedere a un elemento allinterno del corpo di uno degli elementi restituiti con la mia chiamata find(), posso farlo con aura:id di detto sottoelemento come di seguito, nella funzione handleButton?

({ 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") ); <== ? } ); } }) 

Commenti

  • Qualcosa come cmp.find("formItems").find("field").get("v.value");?
  • Quella riga particolare genera un errore, perché (.. penso ..) devo utilizza il ciclo su cmp.find("formItems") perché ci saranno più elementi con quel aura:id.

Risposta

Sembra che questa “ricerca nidificata” (di per sé) non sia possibile. Ho scelto di creare dinamicamente ogni lightning:layoutItem e ciascuno, rispettivamente, lightning:inputField in un init gestore per il mio componente. Questo mi ha permesso di assegnare un aura:id mentre creavo ogni singolo componente.

Risposta

dovresti usare foreach per lightning:inputField aura id, quindi ottieni un array di inputfields cmps quindi fai foreach e ottieni valori come quello che ho provato sotto

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") ); <== ? } ); } 

Commenti

  • Funzionerebbe in scenari in cui il caso duso è esattamente lo stesso del mio esempio. Sfortunatamente (e mi scuso se questa è stata una cattiva pratica), il mio esempio non è il mio caso duso esatto. Stavo cercando di semplificarlo per trovare una risposta senza troppi dettagli.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *