¿Es posible “ encontrar ” un aura: id dentro de un aura: id?

Tengo un componente en el que estoy construyendo un lightning:recordEditForm usando campos basados en un conjunto de campos diferente que parece algo como esto:

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

Cuando llamas a find() en un aura:id que ocurre varias veces, obtienes una matriz de todo con ese aura:id. Si quisiera acceder a un elemento dentro del cuerpo de uno de los elementos devueltos con mi llamada find(), ¿podría hacerlo con la aura:id de dicho subelemento como a continuación, en la handleButton función?

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

Comentarios

  • ¿Algo como cmp.find("formItems").find("field").get("v.value");?
  • Esa línea en particular arroja un error, porque (.. creo que ..) necesito use el bucle en cmp.find("formItems") porque habrá varios elementos con ese aura:id.

Respuesta

Parece que esta «búsqueda anidada» (per se) no es posible. Opté por crear dinámicamente cada lightning:layoutItem y cada uno, respectivamente, anidado lightning:inputField en un init controlador para mi componente. Esto me permitió asignar un aura:id cuando creé cada componente individual.

Respuesta

debes usar foreach para lightning:inputField aura id, luego obtienes una matriz de campos de entrada cmps, luego foreach y obtienes valores como los que probé a continuación

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

Comentarios

  • Esto funcionaría en escenarios donde el caso de uso es exactamente el mismo que en mi ejemplo. Desafortunadamente (y me disculpo si esto fue una mala práctica), mi ejemplo no es mi caso de uso exacto. Estaba tratando de simplificarlo para encontrar una respuesta sin demasiados detalles.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *