Frage

durandal: Was ist der richtige Weg, Daten (Parameter) zwischen den Viewmodels, wenn möglich (ohne Umgang mit dem Backend) zu bestehen.

lassen Sie sagen, ich habe 2 Ansichten Übersicht und details ich möchte, dass der Benutzer auf einem Listenelement von Übersicht erfüllt istvon diesem Element und geben Sie es an Details viewmodel, damit ich mit dieser ID arbeiten kann.

Vielen Dank für die Hilfe

War es hilfreich?

Lösung

TIPP: Sie wollen wahrscheinlich den routengesteuerten Ansatz. Der andere ist der Vollständigkeit halber.

viewmodel-angesetzter Ansatz Im Allgemeinen würde ich sagen: Erstellen Sie ein Modul, nennen wir IT-Daten und injizieren Sie das Datenmodul in beide ViewModels. Übersicht kann dann das Attribut ClickLeTElementID auf dem Datenmodul einstellen, und Details können den Wert des Attributs lesen und verwenden (Sie könnten sogar das Attribut beobachtbar machen, sodass Details benachrichtigt werden, wenn das Attribut mit der Übersicht geändert wird). Dieser Ansatz funktioniert, wenn beide ViewModels gleichzeitig aktiv sein können, während meine nächste (bevorzugte) Lösung nur funktioniert, wenn Sie von einer Sicht auf die andere weiterleiten, so dass sie gleichzeitig nie aktiv sind. Dieser "ViewModel-Driving-Ansatz" ist etwas, das ich persönlich für allgemeine Daten in der Anwendung verwende (Sie können auch Ihre AnwendungshellansichtModel für diese Arten von Attributen verwenden).

Routengesteuerter Ansatz Scheint das zu sein, was Sie Ihre Beschreibung der Situation erhalten möchten. Definierte Routen können (optionale) Parameter annehmen. Angenommen, Sie haben jetzt Route 'Details', Sie können es in "Details /: ID" ändern (akzeptiert einen ID-Parameter, nicht optional) oder "Details (/: ID)" (akzeptiert einen ID-Parameter, optional).

Sie benötigen ein Ereignishandler ein bisschen so, dass Sie auf ein Listenelement klicken:

generasacodicetagpre.

ko.dataFor ist ein schöner Knockout-Helfer, um die ViewModel-Daten zu erhalten, die an das Element gebunden ist, das Sie eingeben, in diesem Fall Ihr Listenelement. Klicken Sie auf Sie auf, auf die Sie zu Angaben navigieren möchten, und geben Sie die ID des angeklickten Elements auf Details weiter. Dass der oben genannte Code das alles tut.

Jetzt Ihre Details ViewModels aktivierte Funktion sollte so aussehen:

generasacodicetagpre.

Bearbeiten: Zusätzlicher Tipp: Sie können auch die Route mit ID direkt aus einem Link auslösen. Angenommen, Ihr gesamtes Listenelement ist in einem Anker-Tag umwickelt, Sie können so etwas tun:

generasacodicetagpre.

Viel Glück! Wenn es immer noch unklar ist, lass mich wissen,

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top