Gesamtpunktzahl pro Seite

Widgets können auch verwendet werden, um mit Antworten von Befragten zu interagieren und bestimmte Ergebnisse zu erzeugen, ohne eine Benutzeroberfläche für das Widget definieren zu müssen.

Im folgenden Beispiel berechnet das Widget anhand einer bewerteten Umfrage die Gesamtsumme aller bewerteten Antworten, die sich auf derselben Seite wie das Widget befinden.

class PageScoreTotalWidget extends NGSWidget {
    /* HTML-Vorlage, die generiert wird, bevor die Klasse erstellt wird
        Alle IDs und CSS-Klassennamen werden mit der uniqueId
        versehen, die während der Erstellung des Widgets bereitgestellt wird */
    static get template() {
        return ` `; // Wir benötigen keine UI
    }

    /* Stil, der diesem Widget zugewiesen wird. Beachten Sie, dass alle 
      Elementklassen mithilfe der eindeutigen Widget-ID gegliedert werden */  
    static get style() {
        return ``
    }

    /* Unterstützt dieses Widget eine Beschriftung? Die Beschriftung ist der Text, den ein Formular-
     Administrator im Formulardesign eingeben kann und der in die Vorlage eingefügt werden kann
     mithilfe des Tags <ngs-label></ngs-label>
     */
    static get hasLabel() {
        return false; // Wir müssen kein Label anzeigen, da wir keine UI haben
    }

    /* Ermöglicht, die Antwort als erforderlich oder nicht erforderlich festzulegen
       über die Antwort-Einstellungsseite, um
       die Widget-Antwort während der Umfrage erforderlich zu machen */
    static get required() {
        return true;
    }

    /* Eigenschaften, die im Formulardesigner für jede
     Antwort festgelegt werden können, die diesen Widget-Typ in den Antwort-Eigenschaften verwendet */
    static get propertiesDef() {
        return [];
    }

    init() {
        // Gibt die Seiten-ID zurück, auf der das Widget instanziiert wurde
        currentPageId = this.getAnswerPage(this.answerContext.answer);
        
        // Abonniere das Observable der Antworten des Befragten
        // dies ermöglicht uns, die Antworten des Befragten zu erhalten
        // sobald neue Antworten eingegeben oder geändert wurden 
        this.getRespondentAnswers$(respondentAnswers => {
            // Berechne den Score und speichere das Ergebnis
            // als Antwort des Befragten in der aktuellen Umfrage
            this.setAnswer(getPageTotalScore(respondentAnswers))
        });
    }
    
    // Gibt die Gesamtsumme der Punkte zurück, basierend 
    // auf den Antworten des Befragten und
    // dieser Widget-Seite 
    getPageTotalScore(respondentAnswers) { 
        var totalScore = 0;
        for (var i=0;i<respondentAnswers.length;i++) {
            // Ist diese Antwort des Befragten Teil der aktuellen Widget-Seite?
            if (this.getAnswerPage(this.answers.find(a => a.id == respondentAnswers[i].answerId)) == currentPageId) {
                
                // Rufe die Umfrage-Antwort ab
                var answer = this.answers
                    .find(a => a.id == respondentAnswers[i].answerId);
                
                // Hat die Antwort einen zu berechnenden Score?
                if (answer && answer.scorePoint != null) {
                    // Berechne den Seiten-Score neu
                    totalScore+=answer.scorePoint;
                }
            }
        }
        
        return totalScore;
    }
    
    // Ermittle die Seiten-ID der Antwort
    getAnswerPage(answer) {
        if (!answer) return;
        var question = this.questions.find(q => q.id == answer.questionId);
        return question ? question.pageId : null;
    }

    isValid() {
        return null;
    }
}

Zuletzt aktualisiert

War das hilfreich?