Is het mogelijk om “ ” een aura: id te vinden binnen een aura: id?

Ik heb een component waarbij ik een lightning:recordEditForm bouw met behulp van velden die zijn gebaseerd op verschillende veldsets die eruit zien als iets dergelijks:

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

Wanneer u find() aanroept op een aura:id die meerdere keren voorkomt, krijg je een array van alles terug met die aura:id. Als ik toegang zou willen krijgen tot een element in de body van een van de elementen die zijn geretourneerd met mijn find() aanroep, zou ik dat dan kunnen doen met de aura:id van genoemd subelement zoals hieronder, in de handleButton functie?

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

Reacties

  • Iets als cmp.find("formItems").find("field").get("v.value");?
  • Die specifieke regel genereert een fout, omdat (.. ik denk ..) ik moet gebruik de lus op cmp.find("formItems") omdat er meerdere elementen met die aura:id zullen zijn.

Answer

Het lijkt erop dat deze “geneste vondst” (per se) niet mogelijk is. Ik heb ervoor gekozen om elk lightning:layoutItem en elk, respectievelijk, lightning:inputField in een init genest handler voor mijn component. Hierdoor kon ik een aura:id toewijzen terwijl ik elk afzonderlijk onderdeel creëerde.

Antwoord

je zou foreach voor lightning:inputField aura id moeten gebruiken, dan krijg je een array van inputfields cmps, doe dan foreach en krijg waarden zoals wat ik probeerde hieronder

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

Opmerkingen

  • Dit zou werken in scenarios waarin het gebruik precies hetzelfde is als in mijn voorbeeld. Helaas (en ik bied mijn excuses aan als dit een slechte gewoonte was), is mijn voorbeeld niet mijn exacte use-case. Ik probeerde het te vereenvoudigen om een antwoord te vinden zonder al te veel van de details.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *