Material Datum
Dieses Beispiel integriert den folgenden bereits vorhandenen JavaScript-Material-Datumsauswähler https://github.com/FreddyFY/material-datepicke und zeigt, wie externes JavaScript und CSS verwendet werden, um Eingaben des Befragten zu erfassen und die Eingabe mit mehrsprachiger Unterstützung zu validieren sowie das Styling basierend auf dem aktuellen ngSurvey theme ausgewählt vom Survey-Manager.
class MaterialDateWidget extends NGSWidget {
/*
Beispiel, das zeigt, wie eine externe JavaScript-
basierte Erweiterung als ngSurvey-Widget mit Label-Unterstützung integriert wird.
Dieses Beispiel integriert den material date picker
https://github.com/FreddyFY/material-datepicker
Zeigt, wie externes JavaScript und CSS verwendet werden, um Eingaben des Befragten zu erfassen
und die Eingabe mit mehrsprachiger Unterstützung zu validieren
*/
/* HTML-Vorlage, die generiert wird, bevor die Widget-Klasse erstellt wird
Alle IDs werden durch die uniqueId ergänzt
die während der Erstellung des Widgets angegeben wird */
static get template() {
return `<input class="ngs-question__answer-field ngs-question__answer-field-material-date" type="text" id="materialpicker001">`;
}
/* Stil, der diesem Widget zugewiesen wird. Beachten Sie, dass alle
Elementklassennamen mithilfe der eindeutigen ID des Widgets abgegrenzt werden */
static get style() {
return `.ngs-question__answer-field-material-date {max-width:100px;}`
}
/* Ermöglicht, die Antwort als erforderlich oder nicht erforderlich festzulegen
über die Antwort-Einstellungsseite, um
die Widget-Antwort während der Umfrage als erforderlich zu markieren
*/
static get required() {
return true;
}
/* Eigenschaften, die im Formular-Designer für jede
Antwort festgelegt werden können, die diesen Widget-Typ verwendet */
static get propertiesDef() {
return [{
id: 'color',
label: 'color',
defaultValue: 'var(--ngs-accent-color)',
type: 'text'
},
{
id: 'orientation',
label: 'Orientation',
defaultValue: 'portrait',
type: 'list',
list: [{
name: 'portrait',
value: 'portrait'
},
{
name: 'landscape',
value: 'landscape'
}
]
}
];
}
/* Externe JavaScript-Abhängigkeiten, die geladen werden
bevor das Widget erstellt wird */
static get jsDependencies() {
return [{
id: 'moments',
url: 'https://momentjs.com/downloads/moment-with-locales.min.js'
},
{
id: 'materialdate',
url: 'https://cdn.rawgit.com/FreddyFY/material-datepicker/master/dist/material-datepicker.min.js'
}
];
}
/* Externe CSS-Abhängigkeiten, die geladen werden
bevor das Widget erstellt wird */
static get cssDependencies() {
return [{
id: 'googlefonts',
url: 'https://fonts.googleapis.com/icon?family=Material+Icons'
},
{
id: 'materialdatecss',
url: 'https://cdn.rawgit.com/FreddyFY/material-datepicker/master/dist/material-datepicker.css'
}
];
}
init() {
var widget = this;
// Holen Sie das Input-Element aus der Vorlage
// Es ist wichtig, jede ID
// der Vorlage mit der uniqueId des Widgets zu versehen
this.inputField = this.getWidgetElementById('materialpicker001');
this.getLanguage$(lang => {
// Richten Sie den Dateiauswähler ein, es ist wichtig, jede ID immer zu suffixen
// der Vorlage mit der uniqueId des Widgets zu versehen
this.materialPicker001 = new MaterialDatepicker('#materialpicker001' + this.uniqueId, {
lang: lang.languageCode,
color: this.properties.color,
orientation: this.properties.orientation,
onNewDate: function(date) {
// Wenn der Benutzer ein Datum ausgewählt hat, stellen Sie den Wert im Formular ein
widget.setAnswer(widget.inputField.value);
}
});
if (this.materialPicker001) {
// Ermitteln Sie den aktuellen Render-Modus, um zu wissen, wie wir
// den Zustand hier einrichten sollten; setzen Sie ihn auf deaktiviert, wenn
// das Widget im Nur-Lese-Modus ist
this.isDisabled$(disabled => {
this.inputField.disabled = disabled;
});
// Setzen Sie den Anfangswert, wenn das Widget erstellt wird
if (this.answerContext.initialValue) {
this.inputField.value = this.answerContext.initialValue;
} else if (this.inputField.value) {
this.setAnswer(this.inputField.value);
}
// Wenn der Benutzer den Text ändert, stellen Sie sicher, dass der Wert gespeichert wird
// im Formular
this.inputField.addEventListener('input', (event) => {
this.textChange(this.inputField.value, this);
});
}
});
}
// Den Wert an das Formular übermitteln
textChange(value, widget) {
widget.setAnswer(this.inputField.value);
}
// Wird vom Formular aufgerufen
// um zu überprüfen, ob der Wert gültig ist
// Wenn nicht gültig, muss '' zurückgegeben werden (keine Fehlermeldung angezeigt) oder die anzuzeigende Fehlermeldung
// Wenn gültig, null zurückgeben
isValid() {
var date = new Date(this.inputField.value);
if ((this.inputField.value && !(date instanceof Date && !isNaN(date.valueOf())))) {
return 'InvalidDateDataTypeMessage';
} else {
return null;
}
}
}Zuletzt aktualisiert
War das hilfreich?