@AuraEnabled Támogatás az Apex osztály visszatérési típusaihoz?

A The Lightning Components Developer Guide 141. oldalától kezdve felsorolják az érvényes típusokat az auratulajdonságokhoz. Apex osztályok és gyűjtemények szerepelnek benne, ezért írtam egy csúcsvezérlő metódust az Apex osztály objektumok gyűjteményének visszaadására, hogy később mentse őket egy attribútumba.

De amikor a módszer meghívásának eredményeit írom a javascript-konzolt, egyetlen elem tömböt látok, és az elemnek a __proto__-n kívül nincsenek tulajdonságai. A primitívek és a SObjects gyűjteményeivel ezt a munkát helyesen láttam. típus? Tudom, hogy az @AuraEnabled metódusom megfelelően működik, és az akcióhívásom egyszerűen az action.getReturnValue () tartalmát írja a konzolra.

Válasz

Egy dolgot ellenőrizni kell, hogy a válaszban szereplő objektumok hozzáférői tartalmazzák-e az @AuraEnabled jelölést. Például a következők buktattak nemrég a Lightning alkalmazás mintakódjának adaptálásakor:

@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; } 

Folyamatosan kaptam üres eredményeket, és csak akkor változtattam, amikor megváltoztattam a válasz típusa, amiről rájöttem, hogy ez a SelectOption osztály problémája. Ez a szokásos Apex, de nem Aura-kompatibilis. A saját verzióm ez:

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

Nem vagyok benne biztos, hogy ez segít-e a probléma, amellyel szembesültél, de lehet, hogy utánajársz.

Megjegyzések

  • Pontosan ez a probléma. A tényleges kódom visszaadom a ConnectApi.FollowingPage gyűjteményét. Kezdetben arra gondoltam, hogy visszaküldjek egy csomagolót a FollowPage-hez, hogy egyszerűen csökkentse a hasznos teher méretét. Bár azt szeretném, ha elfogadnám a tiédet és Peter ' válaszait. / li>
  • Bármilyen lehetőség a szabványos osztályok, például a SelectOption vagy a ConnectApi létrehozására. A NextPage automatikusan @AuraEnabled lesz? Most sokkal egyszerűbb, ha csak a JSON-ot használja a sorosítás és a deserializálás (két LOC).
  • Ezenkívül hasznosnak találtam, ha az osztályt kontrollerként adtam hozzá az aurakomponensemhez. Ezután az adatok elkezdtek húzódni, amikor meghívtam a controller.js belsejében lévő módszert a kapott üres tömbök helyett előtt.

Válasz

Ha ezt nem tudja működtetni, akkor a JSON használatát megkerülheti. a probléma kikerüléséhez változtassa meg a visszatérési típust String-re, majd adja vissza az objektum JSON-karakterláncát.

Például:

Ha a vezérlőben valami ilyesmi van:

@AuraEnabled public static MyClass getMyInstanceOfClass() { // do stuff MyClass myClassInst = getSomehow(); // do other stuff return myClassInst; } 

Módosítsa erre:

@AuraEnabled public static String getMyInstanceOfClass() { // do stuff MyClass myClassInst = getSomehow(); // do other stuff return JSON.serialize(myClassInst); } 

Ezután a JS-ben:

var yourClassObj = JSON.parse( action.getReturnValue() ); 

Megjegyzések

  • Ez egy működő alternatíva, és amennyire én ' m mindaddig foglalkozott az elfogadott megoldással, amíg nem látok magyarázatot arra, hogy miért nem működött a dobozon kívül '. Köszönöm Peter!

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