@AuraEnabled Support til Apex Class Return typer?

Fra og med side 141 af Lightning Components Developer Guide viser de de gyldige typer for aura attributter. Apex-klasser og samlinger er inkluderet, så jeg har skrevet en apex-controller-metode for at returnere en samling af Apex Class-objekter for senere at gemme dem til en attribut ..

Men når jeg skriver resultaterne for at kalde min metode til javascript-konsollen, jeg ser et enkelt elementarray, og elementet har ingen andre egenskaber end __proto__. Jeg har set dette arbejde korrekt med samlinger af primitiver og SObjects.

Er Apex-klasser faktisk ikke understøttet som en retur type? Jeg ved, at min @AuraEnabled-metode fungerer korrekt, og min tilbagekaldelse af handling skriver simpelthen handlingsindholdet.getReturnValue () til konsollen.

Svar

Én ting at kontrollere er, at accessorerne på alle objekter, der er inkluderet i svaret, inkluderer @AuraEnabled-kommentaren. For eksempel udløste følgende mig for nylig ved tilpasning af prøvekode til en Lightning-applikation:

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

Jeg blev ved med at få tomme resultater, og det var først, da jeg skiftede svarstypen, som jeg indså, at det var et problem med SelectOption-klassen. Dette er standard Apex, men det er ikke Aura-aktiveret. Min egen version af det er:

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

Jeg er ikke sikker på, om dette vil hjælpe med det problem, du står overfor, men det kan være noget, du kan se på.

Kommentarer

  • Dette er netop problemet. Min faktiske kode var returnere en samling ConnectApi.FollowingPage. Jeg tænkte oprindeligt på at returnere en indpakning til FollowingPage for simpelthen at reducere nyttelaststørrelsen. Jeg ville ønske, at jeg kunne acceptere både din og Peter ' s svar dog.
  • Enhver mulighed for at gøre nogle af standardklasser som SelectOption eller ConnectApi.FollowingPage automatisk @AuraEnabled? Lige nu er det meget nemmere at bare bruge JSON til at serialisere og deserialisere (to LOC).
  • Jeg fandt det også nyttigt at tilføje klassen som en controller til min aura-komponent. Efter dette begyndte data at trække igennem, da jeg kaldte metoden inde i controller.js i stedet for de tomme arrays, jeg modtog ing før.

Svar

Hvis du ikke kan få dette til at fungere, er en løsning at bruge JSON for at omgå problemet ved at ændre din returtype til String og derefter returnere objektets JSON-streng.

For eksempel:

Hvis du har i controlleren noget som:

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

Skift det til:

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

Derefter i din JS:

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

Kommentarer

  • Dette er et fungerende alternativ, og så vidt jeg ' m vedrørte den accepterede løsning, indtil jeg ser en forklaring på, hvorfor den ikke ' ikke fungerede uden for kassen. Tak Peter!

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *