Apex 클래스 반환 유형에 대한 @AuraEnabled 지원?

Lightning 구성 요소 개발자 안내서 의 141 페이지부터 유효한 유형이 나열됩니다. 아우라 속성. Apex 클래스 및 컬렉션이 포함되어 있으므로 나중에 속성에 저장할 Apex 클래스 개체 컬렉션을 반환하는 apex 컨트롤러 메서드를 작성했습니다.

하지만 메서드 호출 결과를 자바 스크립트 콘솔에서 단일 요소 배열이 표시되고 요소에 __proto__ 이외의 속성이 없습니다. 기본 요소 및 SObject 컬렉션에서이 작업이 올바르게 작동하는 것을 확인했습니다.

Apex 클래스는 실제로 반환으로 지원되지 않습니다. 유형? 내 @AuraEnabled 메서드가 올바르게 작동하고 있고 작업 콜백이 단순히 action.getReturnValue ()의 내용을 콘솔에 쓰는 것임을 알고 있습니다.

Answer

확인해야 할 한 가지는 응답에 포함 된 모든 개체의 접근 자에 @AuraEnabled 주석이 포함되어 있다는 것입니다. 예를 들어, 최근 Lightning 애플리케이션에 대한 샘플 코드를 적용 할 때 다음과 같은 문제가 발생했습니다.

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

계속 빈 결과가 나오고 변경했을 때만 발생했습니다. SelectOption 클래스의 문제라는 것을 깨달은 응답 유형. 이것은 표준 Apex이지만 Aura를 사용할 수 없습니다. 내 버전은 다음과 같습니다.

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

이게 도움이 될지 잘 모르겠습니다. 현재 직면하고있는 문제이지만 조사 할 수있는 문제 일 수 있습니다.

댓글

  • 정확히 문제입니다. 제 실제 코드는 ConnectApi.FollowingPage 컬렉션을 반환합니다. 처음에는 단순히 페이로드 크기를 줄이기 위해 FollowingPage에 대한 래퍼를 반환하는 것에 대해 생각했습니다.하지만 귀하와 Peter '의 답변을 모두 받아 들일 수 있기를 바랍니다.
  • SelectOption 또는 ConnectApi.FollowingPage와 같은 일부 표준 클래스를 자동으로 @AuraEnabled로 만들 가능성이 있습니까? 지금은 JSON 직렬화 및 역 직렬화 (2 개의 LOC)를 사용하는 것이 훨씬 간단합니다.
  • 또한 클래스를 aura 컴포넌트에 컨트롤러로 추가하는 것이 도움이된다는 것을 알았습니다. 그 후받은 빈 배열 대신 controller.js 내부에서 메서드를 호출 할 때 데이터가 전달되기 시작했습니다. ing before.

답변

이 작업을 수행 할 수없는 경우 해결 방법은 JSON을 사용하는 것입니다. 문제를 해결하려면 반환 유형을 문자열로 변경 한 다음 객체의 JSON 문자열을 반환합니다.

예 :

컨트롤러에 다음과 같은 것이있는 경우 :

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

다음으로 변경 :

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

그런 다음 JS에서 :

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

댓글

  • 이것은 작동하는 대안이며, 제가 '이 솔루션이 즉시 작동하지 않는 이유에 대한 설명을 볼 때까지 ' 수용된 솔루션에 관심이 있습니다. 감사합니다 Peter!

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다