Likertskala – Referenz

Alles auf einen Blick. Wie die Teile zusammenspielen, zeigen die Beispiele in der Navigation.

Alle Aufrufe des Builders, die Modellklassen und die Werte von Editable auf einen Blick. Wie sie zusammenspielen, zeigen die Beispiele, hier steht, was es gibt.

Die beiden Einstiegspunkte

Aufruf Ergebnis
Fmh<int>.LikertSkala() Eine einzelne Skala (LikertSkalaBuilder<T>). T ist der Typ der Skalenwerte, in der Praxis immer int.
Fmh.LikertSkalaGroup() Mehrere Skalen als ein Block (LikertSkalaGroupBuilder). Nicht generisch – die Gruppe arbeitet fest mit int.

Beide werden wie jedes FMH-Widget über @Html.Fmh(...) gerendert. Der Einstiegspunkt kommt aus FMH.Komponente.Kompetenzen.Ui – dieser Namespace gehört in die _ViewImports.cshtml.

Der Builder der einzelnen Skala

Methode Wirkung
.Bind(zeilen, eigenschaftsname) Pflicht. Die Zeilen und der Name der Eigenschaft, an der sie hängen. Aus dem Namen entstehen die Feldnamen des Formulars – ohne ihn kommt beim POST nichts an. Üblich: Html.NameFor(m => m.Likertskala).ToString().
.Id(id) Id der Tabelle (id und id_container) und Suffix der CSS-Klassen an Header, Introduction und Footer. Ohne Angabe eine GUID; bei zwei Skalen auf einer Seite deshalb setzen.
.DescriptionColumn(text) Überschrift der ersten Spalte (der Textspalte).
.Columns(spalten => …) Die Skalenwerte im Markup: spalten.For(wert, text) je Spalte. Der Rückgabewert erlaubt .WidthInPixel(px).
.Columns(liste) Dieselben Spalten als fertige IList<LikertSkalaHeaderColumn<T>> – für Skalen, deren Stufen aus der Datenbank kommen.
.AssessmentType(Editable) Der Bearbeitungsmodus, siehe unten. Vorgabe: Editable.SelfAssessment.
.ShowDegreeOfAchievement(bool = true) Zweite Kopfzeile mit dem Erfüllungsgrad. Vorgabe: aus.
.Header(html) Block über der Skala, div.lk-header.
.Introduction(html) Block darunter, div.lk-introduction.
.Footer(html) Block unter der Skala, div.lk-footer.
.AssessmentLegend(legende) Die Legende der Skala, siehe «Selbst- und Fremdeinschätzung».

Header, Introduction, Footer und DescriptionColumn nehmen HTML entgegen, ebenso der Text und die Überschrift einer Zeile. Stammt der Text aus einer Eingabe, gehört er vorher bereinigt.

Der Builder der Gruppe

Methode Wirkung
.Bind(modell, eigenschaftsname) Pflicht. Das LikertSkalaGroupModel und der Name der Eigenschaft. Der Builder hängt .LikertSkalaGroup selbst an.
.Id(id) Präfix. Die einzelnen Skalen bekommen daraus id-0, id-1, …

Mehr gibt es nicht: Spalten, Texte, Bearbeitungsmodus und Erfüllungsgrad stehen am Modell.

Die Modellklassen

LikertSkalaRow<T> – eine Zeile:

Eigenschaft Bedeutung
Code Fachlicher Schlüssel der Zeile. Geht als Hidden-Feld mit und identifiziert die Antwort beim POST.
Text Der Text der Zeile.
Header Fette Überschrift über dem Text (div.fmh-lk-row-header). Optional.
SelfAssessmentValue Die Selbsteinschätzung.
ExternalAssessmentValue Die Fremdeinschätzung.
DegreeOfAchievementValue Die geforderte Stufe. Nur Grundlage der Berechnung und der Hervorhebung – nie ein Eingabefeld.
GetAssessmentValue(Editable) Der Wert, der im angegebenen Modus gilt.

LikertSkalaHeaderColumn<T> – eine Spalte: Value (der Skalenwert), Text (die Beschriftung), Width (Vorgabe 125 px), dazu WidthInPixel(px) zum Verketten.

LikertSkalaModel – eine Skala innerhalb einer Gruppe:

Eigenschaft Entspricht am Builder
LikerstSkalaHeader .Header(...) – der Block über der Skala.
Header .DescriptionColumn(...) – die Überschrift der ersten Spalte.
Introduction, Footer .Introduction(...), .Footer(...)
Columns .Columns(liste)
Likertskala die Zeilen aus .Bind(...)
ShowDegreeOfAchievement .ShowDegreeOfAchievement()
Id Die fachliche Id der Skala. Die Element-Ids der Gruppe bildet der Gruppen-Builder aus seinem eigenen Präfix.

LikertSkalaGroupModel – die Gruppe: GroupHeader, Header und Introduction über allen Skalen, Footer darunter, AssessmentType für alle Skalen gemeinsam, LikertSkalaGroup als Liste der LikertSkalaModel.

AssessmentLegend – die Legende: SelfAssessmentColorCssClass, SelfAssessmentLegentText, ExternalAssessmentColorCssClass, ExternalAssessmentLegendText. Die Texte sind übersetzt («Meine Einschätzung» / «Definitive Einschätzung»).

DegreeOfAchievementCalculator<T> und DegreeOfAchievementResult sind öffentlich: Wer die Prozentwerte ausserhalb der Skala braucht (Auswertung, PDF), rechnet sie mit derselben Klasse.

Editable – wer beurteilt

Wert Bearbeitet wird Daneben sichtbar Radiobuttons
SelfAssessment (Vorgabe) SelfAssessmentValue die Fremdeinschätzung als Markierung aktiv
ExternalAssessment ExternalAssessmentValue die Selbsteinschätzung als Markierung aktiv
ExternalAssessmentReadOnly – die Fremdeinschätzung disabled
None SelfAssessmentValue – aktiv, ohne Vorauswahl

Für die reine Anzeige einer bereits abgeschlossenen Beurteilung ist ExternalAssessmentReadOnly vorgesehen – nur dieser Modus sperrt die Radiobuttons.

Was beim POST ankommt – und was nicht

Der Builder rendert je Zeile Hidden-Felder und einen Radiobutton je Spalte. Zurück kommt deshalb genau das:

Feld Kommt zurück
Code immer
Text immer – bei gesetztem Header als «Überschrift Text» in einem Feld
der bearbeitete Wert aus dem angeklickten Radiobutton; ohne Klick gar nichts (bei int also 0)
der andere Einschätzungswert als Hidden-Feld, unverändert
DegreeOfAchievementValue nein – die geforderte Stufe ist Konfiguration, kein Eingabefeld
Spalten, Überschriften, Einleitung, Fusstext nein

Daraus folgt die wichtigste Regel im Umgang mit der Skala: Für die nächste Ausgabe muss die Konfiguration serverseitig neu aufgebaut werden. Ein Modell, das nur aus dem POST stammt, hat keine Spalten und keine Texte mehr – die Skala käme leer zurück.

Der übliche Ablauf im Controller ist deshalb: die eigenen Zeilen laden, die Antworten über den Code hineinschreiben und für die Ausgabe Spalten, Texte und Rolle wieder frisch setzen. So zeigt die Seite nach dem Absenden den neuen Stand und nicht die Ausgangsdaten – die Beispiele machen es im Tab «Zustand» vor.

Bei ExternalAssessmentReadOnly senden die gesperrten Radiobuttons wie bei jedem disabled-Feld nichts. Eine schreibgeschützte Skala steht deshalb sinnvollerweise ausserhalb des Formulars.

Gestaltung

Die Klassen (fmh-lk-table, fmh-self-assessment, fmh-degree-of-achievement, …) stecken im SCSS-Bundle dieses Pakets. Die Radiobuttons werden über data-mdc-auto-init von Material Components aufgebaut, das kommt mit dem JavaScript-Bundle. Fehlt die Einrichtung dafür, steht die Skala unformatiert da; was dazugehört, steht unter Vorbedingungen.