Minulla on komponentti, johon rakennan lightning:recordEditForm
-kenttää käyttämällä kenttiä, jotka perustuvat eri kenttäjoukkoihin, jotka näyttävät jotain tällaista:
<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>
Kun soitat find()
numeroon aura:id
joka tapahtuu useita kertoja, saat takaisin joukon kaikkea aura:id
. Jos halusin käyttää elementtiä jossakin find()
-puhelulleni palautetusta elementistä, voinko tehdä sen aura:id
mainitun alielementin kuten alla, funktiossa 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") ); <== ? } ); } })
Kommentit
Vastaa
Näyttää siltä, että tämä ”sisäkkäinen löytö” (sinänsä) ei ole mahdollista. Päätin luoda dynaamisesti kukin lightning:layoutItem
ja kukin vastaavasti sisäkkäin lightning:inputField
init
komponenttini käsittelijä. Tämä antoi minulle mahdollisuuden määrittää aura:id
, kun luotin kunkin yksittäisen komponentin.
Vastaa
sinun tulisi käyttää foreach
lightning:inputField
auratunnistetta varten. Sitten saat joukon syötekenttiä cmps, tee sitten foreach ja saat arvot kuten yritin alla
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") ); <== ? } ); }
Kommentit
- Tämä toimii tilanteissa, joissa käyttötapa on täsmälleen sama kuin esimerkkini. Valitettavasti (ja anteeksi, jos tämä oli huonoa käytäntöä), esimerkkini ei ole tarkka käyttötapaukseni. Yritin yksinkertaistaa sitä löytääksesi vastauksen ilman liikaa hölynpölyä.
cmp.find("formItems").find("field").get("v.value");
?cmp.find("formItems")
-sivulla, koska siinä on useita elementtejä.aura:id
.