Null ImageПри нажатии на кнопку результат не отображается, а при проверке через консоль inspect ==> показывает значение null.

Высший класс

public class surveycls {
 public static List<Answers__c> AnsList;

@AuraEnabled(cacheable=true) 
public static List<Survey__c> querySurvey() {
         return[SELECT Name, Id FROM Survey__c];
   }

 @AuraEnabled
   public static List<Question__c> questSurvey(Id SurveyId) {
List<Question__c> qstList = [SELECT Id, Name, Choose_any_of_the_option__c FROM Question__c where Survey__c=:SurveyId];
    set<Id> qstId = New set<Id>();
      for (Question__c qst : qstList) {
          qstId.add(qst.Id);
    }
      AnsList = [SELECT Id,Name FROM Answers__c where Question__c IN : qstId];
     return qstList;
}

@AuraEnabled 
public static List<Answers__c> ansSurvey(){
     return AnsList;
}
}

Javascript

import { LightningElement, api, track, } from 'lwc';
import questSurvey from '@salesforce/apex/surveycls.questSurvey';
import ansSurvey from '@salesforce/apex/surveycls.ansSurvey';
export default class surveycls extends LightningElement {

@api questionrecord;
@api surveyrecord;
@track quest;
@track error;
@track ans;

connectedCallback() {
      questSurvey({ SurveyId: this.surveyrecord })
         .then(result => {
             this.quest = result;
             console.log('questions', this.quest);
             })
             .catch(error => {
                 this.error = error;
              })
    

             ansSurvey({ QuestionId: this.questionrecord })
                 .then(result => {
                     this.ans = result;
                     console.log('Answers', this.ans);
              })               
               .catch(error => {
                    this.error = error;
                })
        }
 }

HTML

<template>
    <lightning-card title="Question with Choices" icon-name="utility:answer">
        <template if:true={quest}>
           <template for:each={quest} for:item="Question">
               <p key={Question.Id}>{Question.Name}</p>
           </template>
      </template>
      <template if:true={ans}>
         <template for:each={ans} for:item="Answer">
             <p key={Answer.Id}>{Answer.Name}</p>
      </template>
   </template>
</lightning-card>
</template>
0
Nithin 16 Ноя 2021 в 10:55

1 ответ

Это происходит потому, что в вашем методе ansSurvey() вы предполагаете, что экземпляр контекста или класса будет сохранен. Методы LWC должны быть независимыми единицами кода, которые на самом деле не зависят от какого-либо контекста вне метода. Вы определенно можете полагаться на состояние БД и кеш платформы, но не на экземпляры классов, если только вы не передаете их.

Чтобы заставить ваш код работать, нужно включить вызов questSurvey, и это обеспечит заполнение ansList.

@AuraEnabled 
public static List<Answers__c> ansSurvey(Id surveyId){
     surveycls.questSurvey(surveyId);
     return AnsList;
}

Двигаясь вперед, более кратким способом написания этого будет.


public with sharing class SurveyCls {

    @AuraEnabled(Cacheable=true)
    public static List<Survey__c> querySurvey() {
        return [SELECT Name, Id FROM Survey__c];
    }

    @AuraEnabled
    public static List<Question__c> questSurvey(Id surveyId) {
        return [
                SELECT Id, Name, Choose_any_of_the_option__c
                FROM Question__c
                WHERE Survey__c = :surveyId
        ];
    }

    @AuraEnabled
    public static List<Answers__c> ansSurvey(Id surveyId) {
        return [
                SELECT Id,Name
                FROM Answers__c
                WHERE Question__c IN (
                        SELECT Id, Name, Choose_any_of_the_option__c
                        FROM Question__c
                        WHERE Survey__c = :surveyId
                )
        ];
    }
}

Это не выполняется.

0
manjit5190 16 Ноя 2021 в 12:38
Привет, @manjit5190. Большое спасибо. У меня есть вопрос: при изменении кода, как вы сказали выше (первый), проблема с нулевым значением решена, но ответы не отображаются. Не могли бы вы помочь мне с этим?
 – 
Nithin
16 Ноя 2021 в 13:00