Mám komponentu, kde stavím lightning:recordEditForm
pole využívající různé sady polí, které vypadají něco takového:
<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>
Když zavoláte find()
na aura:id
který se vyskytuje vícekrát, získáte zpět vše se aura:id
. Pokud bych chtěl získat přístup k prvku v těle jednoho z prvků vrácených při mém find()
volání, mohl bych to udělat pomocí aura:id
uvedeného dílčího prvku, jak je uvedeno níže, ve funkci 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") ); <== ? } ); } })
Komentáře
.
Odpověď
Zdá se, že tento „vnořený nález“ (jako takový) není možný. Rozhodl jsem se dynamicky vytvořit každý lightning:layoutItem
a každý vnořený lightning:inputField
do init
obslužný program pro můj komponent. To mi umožnilo přiřadit každou jednotlivou součást aura:id
.
Odpovědět
měli byste použít foreach
pro lightning:inputField
aura id, pak získáte řadu cmd vstupních polí, pak proveďte foreach a získejte hodnoty jako to, co jsem zkoušel níže
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") ); <== ? } ); }
Komentáře
- To by fungovalo ve scénářích, kde je případ použití přesně stejný jako můj příklad. Bohužel (a omlouvám se, pokud to byla špatná praxe), můj příklad není můj přesný případ použití. Snažil jsem se to zjednodušit, abych našel odpověď bez přílišné hlouposti.
cmp.find("formItems").find("field").get("v.value");
?cmp.find("formItems")
, protože s tím bude