Czy można “ znaleźć ” aurę: id w aurze: id?

Mam komponent, w którym tworzę lightning:recordEditForm przy użyciu pól opartych na innych zestawach pól, które wyglądają jak coś takiego:

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

Gdy dzwonisz pod numer find() na aura:id, które występuje wiele razy, otrzymasz tablicę wszystkiego z tym aura:id. Gdybym chciał uzyskać dostęp do elementu w treści jednego z elementów zwróconych przez moje wywołanie find(), czy mógłbym to zrobić za pomocą aura:id wspomnianego elementu podrzędnego, jak poniżej, w funkcji 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") ); <== ? } ); } }) 

Komentarze

  • Coś w rodzaju cmp.find("formItems").find("field").get("v.value");?
  • Ta konkretna linia generuje błąd, ponieważ (… myślę…) muszę użyj pętli na cmp.find("formItems"), ponieważ będzie wiele elementów z tym aura:id.

Odpowiedź

Wygląda na to, że to „zagnieżdżone znalezienie” (samo w sobie) nie jest możliwe. Zdecydowałem się na dynamiczne utworzenie każdego elementu lightning:layoutItem i odpowiednio każdego zagnieżdżonego lightning:inputField w init program obsługi dla mojego komponentu. Pozwoliło mi to przypisać aura:id podczas tworzenia poszczególnych komponentów.

Odpowiedź

powinieneś użyć foreach dla lightning:inputField aura id, wtedy otrzymasz tablicę cmps inputfields, a następnie wykonaj foreach i uzyskaj wartości takie jak to, co próbowałem poniżej

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

Komentarze

  • To zadziała w scenariuszach, w których przypadek użycia jest dokładnie taki sam jak w moim przykładzie. Niestety (i przepraszam, jeśli była to zła praktyka), mój przykład nie jest moim dokładnym przypadkiem użycia. Próbowałem to uprościć, aby znaleźć odpowiedź bez zbytniej szczegółowości.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *