Gesamtpunktzahl pro Seite
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?