Jai un composant dans lequel je construis un lightning:recordEditForm
en utilisant des champs basés sur un jeu de champs différent qui ressemble à un petit quelque chose comme ceci:
<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>
Lorsque vous appelez find()
sur un aura:id
qui se produit plusieurs fois, vous récupérez un tableau de tout avec ce aura:id
. Si je voulais accéder à un élément dans le corps de lun des éléments renvoyés avec mon appel find()
, pourrais-je le faire avec aura:id
dudit sous-élément comme ci-dessous, dans la fonction 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") ); <== ? } ); } })
Commentaires
Réponse
Il semble que cette « recherche imbriquée » (en soi) nest pas possible. Jai choisi de créer dynamiquement chaque lightning:layoutItem
et chacun, respectivement, imbriqué lightning:inputField
dans un init
gestionnaire pour mon composant. Cela ma permis dattribuer un aura:id
lorsque jai créé chaque composant individuel.
Réponse
vous devez utiliser foreach
pour lightning:inputField
aura id, puis vous obtenez un tableau de champs dentrée cmps puis faites foreach et obtenez des valeurs comme ce que jai essayé ci-dessous
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") ); <== ? } ); }
Commentaires
- Cela fonctionnerait dans les scénarios où le cas dutilisation est exactement le même que mon exemple. Malheureusement (et je mexcuse si cétait une mauvaise pratique), mon exemple nest pas mon cas dutilisation exact. Jessayais de le simplifier pour trouver une réponse sans trop de détails.
cmp.find("formItems").find("field").get("v.value");
?cmp.find("formItems")
car il y aura plusieurs éléments avec ceaura:id
.