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?