@AuraEnabled Støtte for Apex Class Return-typer?

Fra og med side 141 av The Lightning Components Developer Guide , viser de gyldige typer for auraattributter. Apex-klasser og samlinger er inkludert, så jeg har skrevet en apex-kontrollermetode for å returnere en samling med Apex Class-objekter for senere å lagre til et attributt ..

Men når jeg skriver resultatene av å kalle metoden min til javascript-konsollen, jeg ser en enkelt elementmatrise og elementet har ingen andre egenskaper enn __proto__. Jeg har sett dette fungere riktig med samlinger av primitiver og SObjects.

Er Apex-klasser faktisk ikke støttet som en retur type? Jeg vet at @AuraEnabled-metoden min fungerer som den skal, og at tilbakeringingen min bare skriver innholdet i handlingen.getReturnValue () til konsollen.

Svar

En ting å sjekke er at aksessorene på objekter som er inkludert i svaret inkluderer @AuraEnabled-merknaden. Følgende løste meg for eksempel nylig når jeg tilpasser eksempelkoden for et lynapplikasjon:

@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 fikk stadig tomme resultater, og det var først da jeg endret svarstypen at jeg innså at det var et problem med SelectOption-klassen. Dette er standard Apex, men det er ikke Aura-aktivert. Min egen versjon av den 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 hjelpe med problemet du står overfor, men det kan være noe du kan se på.

Kommentarer

  • Dette er akkurat problemet. Min faktiske kode var Jeg returnerte en samling ConnectApi.FollowingPage. Jeg tenkte først å returnere en innpakning til FollowingPage for å redusere nyttelaststørrelsen. Jeg skulle ønske jeg kunne godta både dine og Peter ' svarene skjønt.
  • Eventuelle muligheter for å gjøre noen av standardklassene som SelectOption eller ConnectApi.FollowingPage automatisk @AuraEnabled? Akkurat nå er det mye enklere å bare bruke JSON til å serialisere og deserialisere (to LOC).
  • Jeg syntes også det var nyttig å legge til klassen som en kontroller i min aura-komponent. Etter dette begynte data å trekke igjennom da jeg ringte metoden inne i controller.js i stedet for de tomme matriser jeg fikk ing før.

Svar

Hvis du ikke kan få dette til å fungere, vil en løsning være å bruke JSON for å komme deg rundt problemet ved å endre returtypen til String og deretter returnere JSON-strengen til objektet.

For eksempel:

Hvis du har i kontrolleren noe som:

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

Endre den til:

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

Så i JS:

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

Kommentarer

  • Dette er et fungerende alternativ, og så langt jeg ' m gjaldt den aksepterte løsningen til jeg ser en forklaring på hvorfor den ikke ' ikke fungerte rett utenfor boksen. Takk Peter!

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *