Ist es möglich, “ ” eine Aura: id innerhalb einer Aura: id zu finden?

Ich habe eine Komponente, in der ich eine lightning:recordEditForm mit Feldern erstelle, die auf einem anderen Feldsatz basieren, der wie folgt aussieht etwas in der Art:

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

Wenn Sie find() auf einer aura:id Wenn dies mehrmals vorkommt, erhalten Sie ein Array von allem mit dieser aura:id zurück. Wenn ich auf ein Element im Hauptteil eines der Elemente zugreifen möchte, die mit meinem Aufruf find() zurückgegeben wurden, kann ich dies mit dem Aufruf aura:id tun des Unterelements wie unten in der Funktion 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") ); <== ? } ); } }) 

Kommentare

  • So etwas wie cmp.find("formItems").find("field").get("v.value");?
  • Diese bestimmte Zeile löst einen Fehler aus, weil (.. ich denke ..) ich muss Verwenden Sie die Schleife für cmp.find("formItems"), da mit aura:id mehrere Elemente vorhanden sind.

Antwort

Es scheint, dass dieser „verschachtelte Fund“ (per se) nicht möglich ist. Ich habe mich dafür entschieden, jedes lightning:layoutItem und jedes verschachtelte lightning:inputField in einem init dynamisch zu erstellen Handler für meine Komponente. Dadurch konnte ich beim Erstellen jeder einzelnen Komponente eine aura:id zuweisen.

Antwort

Sie sollten foreach für lightning:inputField Aura-ID verwenden, dann erhalten Sie ein Array von Eingabefeldern cmps, dann foreach und erhalten Werte wie das, was ich versucht habe unten

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

Kommentare

  • Dies würde in Szenarien funktionieren, in denen der Anwendungsfall genau dem in meinem Beispiel entspricht. Leider (und ich entschuldige mich, wenn dies eine schlechte Praxis war) ist mein Beispiel nicht mein genauer Anwendungsfall. Ich habe versucht, es zu vereinfachen, um eine Antwort zu finden, ohne zu viel von dem Nitty Gritty.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.