Est-il possible de “ trouver ” une aura: id dans une aura: id?

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

  • Quelque chose comme cmp.find("formItems").find("field").get("v.value");?
  • Cette ligne particulière génère une erreur, car (.. je pense ..) je dois utilisez la boucle sur cmp.find("formItems") car il y aura plusieurs éléments avec ce aura:id.

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.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *