Knockout: Rendervorlage basierend auf Objekttyp

Erstellt am 20. Juli 2019  ·  5Kommentare  ·  Quelle: knockout/knockout

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

Hilfreichster Kommentar

https://knockoutjs.com/documentation/template-binding.html

Scrollen Sie nach unten zu Hinweis 5.

Alle 5 Kommentare

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/component-binding.html

https://knockoutjs.com/documentation/component-loaders.html

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:

https://github.com/OHDSI/Atlas/blob/master/js/components/cohortbuilder/components/CohortExpressionEditor.js#L361

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

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

brunolau picture brunolau  ·  8Kommentare

while0pass picture while0pass  ·  9Kommentare

priyank-eschool picture priyank-eschool  ·  7Kommentare

johnpapa picture johnpapa  ·  9Kommentare

mcarpenterjr picture mcarpenterjr  ·  3Kommentare