Grundlegendes Feld
class BasicFieldSampleWidget extends NGSWidget {
/* HTML-Vorlage, die generiert wird, bevor die Klasse erstellt wird
Alle IDs und CSS-Klassennamen werden mit der uniqueId versehen,
die bei der Erstellung des Widgets übergeben wird */
static get template() {
return `
<ngs-label></ngs-label>
<div class="ngs-widget-field-container">
<input class="ngs-question__answer-field" type="text" id="myField">
<textarea rows="{{height}}" class="ngs-question__answer-field ngs-question__answer-field-comment"></textarea>
</div>
`;
}
/* Stil, der diesem Widget zugewiesen wird. Beachten Sie, dass alle
Elementklassen mit der eindeutigen Widget-ID abgegrenzt werden */
static get style() {
return `.ngs-widget-field-container {display:flex;flex-direction:row;align-items:center} .flex-auto{flex:1 1 auto}`
}
/* Unterstützt dieses Widget eine Beschriftung? Die Beschriftung ist der Text, den ein Formularadministrator
im Formular-Designer eingeben kann und der in
der Vorlage mit dem <ngs-label></ngs-label>-Tag eingefügt werden kann
*/
static get hasLabel() {
return true;
}
/* Ermöglicht, die Antwort als erforderlich festzulegen oder nicht,
über die Antwort-Einstellungsseite, um
die Widget-Antwort während der Umfrage erforderlich zu machen */
static get required() {
return true;
}
/* Eigenschaften, die im Formular-Designer für jede
Antwort gesetzt werden können, die diesen Widget-Typ als Antwort verwendet, in den Antwort-Eigenschaften */
static get propertiesDef() {
return [{
id: 'height',
label: 'height',
defaultValue: '1',
type: 'text'
}];
}
init() {
// Holen Sie das Eingabeelement aus der Vorlage
this.inputField = this.widgetQuerySelector('.ngs-question__answer-field');
this.inputTextArea = this.widgetQuerySelector('.ngs-question__answer-field-comment');
// Wir können jederzeit Änderungen der Eigenschaftswerte erhalten
this.getProperties$(prop => {
this.inputField.style.display = prop.height > 1 ? 'none' : 'block';
this.inputTextArea.style.display = prop.height > 1 ? 'block' : 'none';
});
// Ermitteln Sie den aktuellen Render-Modus, um zu wissen, wie wir
// hier den Zustand einstellen sollten; machen Sie ihn deaktiviert, wenn
// das Widget im Nur-Lese-Modus ist
this.isDisabled$(disabled => {
this.inputField.disabled = disabled;
});
// Holt den aktuellen Wert des Widgets
this.getValue$(value => {
this.inputField.value = value;
this.inputTextArea.value = value;
});
// Setzen Sie den Anfangswert, wenn das Widget erstellt wird
if (this.initialValue) {
this.inputField.value = this.initialValue;
this.inputTextArea.value = this.initialValue;
}
// Wenn der Benutzer den Text ändert, stellen Sie sicher, dass der Wert
// im Formular gespeichert wird
this.inputField.addEventListener('input', (event) => {
this.textChanged(this.inputField.value, this);
});
this.inputTextArea.addEventListener('input', (event) => {
this.textChanged(this.inputTextArea.value, this);
});
}
// Übermittle den Wert an das Formular
textChanged(value, widget) {
if (widget.inputField && widget.inputField.style.display == 'block') {
widget.setAnswer(this.inputField.value);
} else if (widget.inputTextArea && widget.inputTextArea.style.display == 'block') {
widget.setAnswer(this.inputTextArea.value);
}
}
// Wird vom Formular aufgerufen,
// um zu prüfen, ob der Wert gültig ist
// Wenn nicht gültig, muss '' zurückgegeben werden (keine Fehlermeldung wird angezeigt) oder die anzuzeigende Fehlermeldung
// Wenn gültig, geben Sie null zurück
isValid() {
if ((this.inputField && this.inputField.style.display == 'block' && this.inputField.value && this.inputField.value != 'ngsurvey') ||
(this.inputTextArea && this.inputTextArea.style.display == 'block' && this.inputTextArea.value && this.inputTextArea.value != 'ngsurvey')) {
return 'Value must be equal to ngsurvey';
} else {
return null;
}
}
}
Zuletzt aktualisiert
War das hilfreich?