“ lehetséges-e ” egy aurát: id megtalálni az aura: id-ben?

Van egy összetevőm, ahol egy lightning:recordEditForm elemet építek olyan mezők használatával, amelyek egy másik mezőkészleten alapulnak, ilyesmi:

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

Amikor a find() telefonszámot hívja egy aura:id összes tömböt visszakapod azzal a aura:id. Ha a find() hívásommal visszaadott elemek egyikében szeretnék hozzáférni egy elemhez, akkor megtehetem-e a aura:id az alelemhez hasonlóan, az alábbiak szerint, a handleButton függvényben?

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

Megjegyzések

  • Valami olyasmi, mint cmp.find("formItems").find("field").get("v.value");?
  • Az a bizonyos sor hibát dob, mert (.. szerintem ..) meg kell használja a ciklust a cmp.find("formItems") oldalon, mert több elem lesz ezzel az aura:id.

Válasz

Úgy tűnik, hogy ez a “beágyazott lelet” (önmagában) nem lehetséges. Úgy döntöttem, hogy minden lightning:layoutItem -et dinamikusan létrehozok, és mindegyik beágyazódik lightning:inputField egy init alkatrészem kezelője. Ez lehetővé tette számomra, hogy hozzárendeljek egy aura:id -t, amikor létrehoztam az egyes összetevőket.

Válasz

a foreach elemet kell használnia a lightning:inputField aura azonosítóhoz, akkor kap egy sor bemeneti mezőt, cmps, majd foreach-t és olyan értékeket kap, mint amit próbáltam lent

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

Megjegyzések

  • Ez olyan esetekben működne, amikor a felhasználási eset pontosan megegyezik a példámmal. Sajnos (és elnézést kérek, ha ez rossz gyakorlat volt) a példám nem a pontos felhasználási esetem. Próbáltam leegyszerűsíteni, hogy választ találjak anélkül, hogy túl sok lenne az aprócska.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük