Začátek na straně 141 příručky Příručka pro vývojáře Lightning Components , kde jsou uvedeny platné typy pro atributy aury. Jsou zahrnuty třídy Apex a sbírky, takže jsem napsal metodu apexového ovladače, abych vrátil kolekci objektů třídy Apex a později ji uložil do atributu ..
Ale když píšu výsledky volání mé metody na konzolu javascript, vidím jedno pole prvků a prvek nemá žádné jiné vlastnosti než __proto__. Viděl jsem tuto práci správně se sbírkami primitiv a SObjects.
Jsou třídy Apex ve skutečnosti nepodporovány jako návrat typ? Vím, že moje metoda @AuraEnabled funguje správně, a moje zpětné volání akce jednoduše zapíše obsah akce.getReturnValue () do konzoly.
Odpovědět
Jedna věc, kterou je třeba zkontrolovat, je, že přistupující objekty všech objektů zahrnutých v odpovědi obsahují anotaci @AuraEnabled. Například při přizpůsobení ukázkového kódu pro aplikaci Lightning mě nedávno spustil následující:
@AuraEnabled public static List<SelectOption> getPuzzleTypes() { List<SelectOption> options = new List<SelectOption>(); Schema.DescribeFieldResult fieldResult = Puzzle__c.Type__c.getDescribe(); List<Schema.PicklistEntry> ple = fieldResult.getPicklistValues(); for (Schema.PicklistEntry f: ple) { options.add(new SelectOption(f.getLabel(), f.getValue())); } return options; }
Stále se mi zobrazovaly prázdné výsledky a bylo to jen při změně typ odpovědi, který jsem si uvědomil, že se jedná o problém s třídou SelectOption. Toto je standardní Apex, ale není podporován Aurou. Má vlastní verze je:
public class SelectOption { public SelectOption(String value, String label) { this.value = value; this.label = label; this.disabled = false; this.escapeItem = false; } public SelectOption(String value, String label, Boolean isDisabled) { this.value = value; this.label = label; this.disabled = isDisabled; this.escapeItem = false; } @AuraEnabled public String label { get;set; } @AuraEnabled public String value { get;set; } @AuraEnabled public Boolean disabled { get;set; } @AuraEnabled public Boolean escapeItem { get;set; } }
Nejsem si jistý, jestli to pomůže s problém, kterému čelíte, ale může to být něco, na co se můžete podívat.
Komentáře
- Toto je přesně ten problém. Můj skutečný kód byl vrácení sbírky ConnectApi.FollowingPage. Zpočátku jsem přemýšlel o vrácení obálky pro nástroj FollowPage, abych jednoduše zmenšil velikost užitečného zatížení. Přál bych si, abych mohl přijmout vaše i Peterovy ' s odpovědi.
- Jakákoli možnost vytvoření některých standardních tříd, jako je SelectOption nebo ConnectApi.FollowingPage, bude automaticky @AuraEnabled? Právě teď je mnohem jednodušší použít pouze serializaci a deserializaci JSON (dva LOC).
- Také jsem zjistil, že je užitečné přidat třídu jako ovladač do mé komponenty aury. Poté se data začala tahat, když jsem zavolal metodu uvnitř kontroleru.js namísto prázdných polí, které jsem obdržel dříve.
Odpověď
Pokud to nefunguje, řešením by bylo použít JSON problém obejít změnou typu návratu na String a poté vrácením řetězce JSON objektu.
Například:
Pokud máte v řadiči něco jako:
@AuraEnabled public static MyClass getMyInstanceOfClass() { // do stuff MyClass myClassInst = getSomehow(); // do other stuff return myClassInst; }
Změňte to na:
@AuraEnabled public static String getMyInstanceOfClass() { // do stuff MyClass myClassInst = getSomehow(); // do other stuff return JSON.serialize(myClassInst); }
Pak ve vašem JS:
var yourClassObj = JSON.parse( action.getReturnValue() );
Komentáře
- Toto je fungující alternativa, pokud jde o I ' m se týkalo přijatého řešení, dokud neuvidím vysvětlení, proč to ' nefungovalo ihned po vybalení z krabice. Díky Petře!