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
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.
cmp.find("formItems").find("field").get("v.value");
?cmp.find("formItems")
porque habrá varios elementos con eseaura:id
.