Hallo,
Ich setze einen Fragebogen um und suche eine Beratung bezüglich der Umsetzung. Es gibt mehrere Fragetypen: Bei einigen muss der Benutzer eine Antwort eingeben, bei anderen muss er Optionsfelder auswählen und so weiter.
Was ich möchte, ist eine andere Javascript-Klasse für jeden Fragetyp und Knockout, das jedes Frageobjekt mithilfe einer Vorlage rendert, die automatisch basierend auf dem Objekttyp ausgewählt wird.
Was ich bitte, ist ein allgemeiner Rat bezüglich der besten Art und Weise, dies umzusetzen. Im Moment ist meine Idee, die foreach-Bindung zu verwenden und innerhalb dieser Schleife if-Bindungen zu verwenden, um den Objekttyp zu überprüfen.
Ich frage mich jedoch, ob es eine elegante Möglichkeit gibt, dieses Problem mit Komponenten oder ähnlichem zu lösen. Ich möchte es wiederverwendbar machen und diese Logik so weit wie möglich kapseln.
Danke
Okay, ich denke, was ich suche, ist eine Möglichkeit, eine Vorlage basierend auf einem Parameter des viewModel auszuwählen, aber im Komponentenhandler scheint die Vorlagenfunktion keinen Zugriff auf den Zustand der viewModel-Funktion zu haben.
Mein Verständnis ist, dass ich einen benutzerdefinierten ComponentLoader implementieren müsste, um eine benutzerdefinierte loadTemplate-Funktion zu registrieren. Die Frage lautet also: Wie kann ich der Eigenschaft templateConfig der loadTemplate-Funktion benutzerdefinierte Werte hinzufügen?
https://knockoutjs.com/documentation/template-binding.html
Scrollen Sie nach unten zu Hinweis 5.
Ich denke, die Kapselung der verschiedenen Frage-/Antworttypen ist ideal, aber nicht sehr nützlich, da es keine wirkliche Komplexität für jeden Typ gibt.
Ein einfaches Beispiel: https://codepen.io/bludev/pen/aevYrN
Wir tun etwas Ähnliches wie Sie fragen (wenn ich Ihren Anwendungsfall richtig interpretiere):
Wir haben eine Komponenten-pro-Typ-Anordnung, sodass wir den Komponentennamen erhalten, der für den angegebenen Typ verwendet werden soll, wie hier zu sehen:
Sie registrieren eine ko-Komponente mit einem bestimmten Namen, der dem angegebenen Typ entspricht. Sie übergeben die Daten als param
-Wert an die Komponente, und die Komponente ist dafür verantwortlich, das UI-Element zum Ändern des Typs bereitzustellen.
Beispiel für eine der Komponenten:
Vorlage: https://github.com/OHDSI/Atlas/blob/master/js/components/cohortbuilder/components/ConditionOccurrenceTemplate.html
ViewModel: https://github.com/OHDSI/Atlas/blob/master/js/components/cohortbuilder/components/ConditionOccurrence.js
Vielen Dank an alle, das war sehr hilfreich! @avickers hat meine Frage perfekt beantwortet, aber die Bemerkung von @bluedev war genau richtig. Auch wenn ich Ihren Ansatz in diesem Punkt nicht weiter verfolgen werde, @chrisknoll , vielen Dank, dass Sie ihn geteilt haben, es war sehr inspirierend.
Danke sehr
Hilfreichster Kommentar
https://knockoutjs.com/documentation/template-binding.html
Scrollen Sie nach unten zu Hinweis 5.