Este posibil să “ să găsească ” o aura: id în cadrul unei aura: id?

Am o componentă în care construiesc un lightning:recordEditForm folosind câmpuri bazate pe alte seturi de câmpuri care arată un ceva de genul acesta:

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

Când apelați find() pe un aura:id care apare de mai multe ori, veți primi înapoi o serie de tot cu acel aura:id. Dacă aș dori să accesez un element din corpul unuia dintre elementele returnate cu apelul meu find(), aș putea să îl fac cu aura:id a sub-elementului menționat ca mai jos, în funcția 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") ); <== ? } ); } }) 

Comentarii

  • Ceva de genul cmp.find("formItems").find("field").get("v.value");?
  • Această linie anume aruncă o eroare, deoarece (.. cred ..) Trebuie să utilizați bucla pe cmp.find("formItems") deoarece vor exista mai multe elemente cu acel aura:id.

Răspuns

Se pare că această „descoperire imbricată” (în sine) nu este posibilă. Am ales să creez în mod dinamic fiecare lightning:layoutItem și, respectiv, fiecare cuibărit lightning:inputField într-un init handler pentru componenta mea. Acest lucru mi-a permis să atribuie un aura:id pe măsură ce am creat fiecare componentă individuală.

Răspuns

ar trebui să utilizați foreach pentru lightning:inputField aura id, apoi veți obține o serie de câmpuri inputmps cmps apoi faceți foreach și obțineți valori precum ceea ce am încercat mai jos

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

Comentarii

  • Acest lucru ar funcționa în scenarii în care cazul de utilizare este exact același cu exemplul meu. Din păcate (și îmi cer scuze dacă a fost o practică slabă), exemplul meu nu este cazul meu exact de utilizare. Încercam să-l simplific, pentru a găsi un răspuns fără prea multe aspecte.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *