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 mitaura: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.