@AuraEnabled Tuki Apex-luokan palautustyypeille?

Alkaen Lightning Components -kehittäjäoppaan sivulta 141, he luetteloavat kelvolliset tyypit auramääritteille. Apex-luokat ja -kokoelmat sisältyvät, joten olen kirjoittanut apex-ohjaimen menetelmän palauttamaan Apex-luokan objektien kokoelman myöhemmin tallennettavaksi attribuuttiin.

Mutta kun kirjoitan menetelmän kutsumisen tulokset javascript-konsolissa näen yhden elementtiryhmän ja elementillä ei ole muita ominaisuuksia kuin __proto__. Olen nähnyt tämän työn oikein primitiivien ja SObjektien kokoelmilla.

Eivätkö Apex-luokkia tueta palautuksena tyyppi? Tiedän, että @AuraEnabled -menetelmäni toimii oikein, ja toimintopyynnöni kirjoittaa vain action.getReturnValue () -sisällön konsolille.

Vastaa

Yksi asia on tarkistaa, että kaikkien vastaukseen sisältyvien objektien käyttöoikeudet sisältävät @AuraEnabled-merkinnän. Esimerkiksi seuraavat kaatui minut äskettäin sovitettaessa mallikoodia Lightning-sovellukseen:

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

Tulin jatkuvasti tyhjiksi, ja vasta vasta kun muutin vastaustyyppi, jonka tajusin olevan ongelma SelectOption-luokassa. Tämä on vakio Apex, mutta se ei ole Auraa tukeva. Oma versio siitä on:

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

En ole varma, auttaako tämä ongelma, jota kohtaat, mutta se voi olla jotain, jota voit tutkia.

Kommentit

  • Tämä on juuri asia. Todellinen koodini oli palautin kokoelman ConnectApi.FollowingPage. Aluksi ajattelin palauttaa kääreen FollowPage-sovellukseen yksinkertaisesti pienentämään hyötykuormaa. Toivon, että voisin hyväksyä sekä sinun että Peterin ' vastaukset.
  • Mahdollisuus tehdä joitain vakioluokkia, kuten SelectOption tai ConnectApi.FollowingPage automaattisesti @AuraEnabled? Tällä hetkellä on paljon yksinkertaisempaa käyttää vain JSON-sarjaa ja deserialisoida (kaksi LOC).
  • Minusta oli myös hyödyllistä lisätä luokka ohjaimena aurakomponenttiin. Tämän jälkeen tietoja alkoi kulkeutua, kun kutsuin controller.js: n sisäistä menetelmää vastaanotettujen tyhjien matriisien sijaan ennen.

Vastaa

Jos et pysty saamaan tätä toimimaan, kiertotapa olisi JSON: n käyttö kiertääksesi ongelman vaihtamalla palautustyypiksi String ja palauttamalla sitten objektin JSON-merkkijono.

Esimerkiksi:

Jos ohjaimessa on jotain:

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

Muuta se muotoon:

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

Sitten JS: ssäsi:

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

Kommentit

  • Tämä on toimiva vaihtoehto, ja sikäli kuin minä ' m koski hyväksyttyä ratkaisua, kunnes näen selityksen siitä, miksi se ei toiminut alusta loppuun. Kiitos Peter!

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *