Die beste Möglichkeit zum Speichern von Änderungen in MVVM / Knockoutjs Web App?

9

Ich habe mit KnockoutJS gespielt und bin absolut begeistert, wie sehr es das Design aus jedem Blickwinkel vereinfacht, indem es verhindert, dass es durch die Ritzen fällt. Meine Frage ist, was ist die empfohlene "Best Practice" zum Speichern der Daten zurück auf den Server? Mein Verständnis ist, dass in einer verbundenen MVVM das erste "M" die Datenschicht ist und so die Abhängigkeitsverfolgung und Benachrichtigungen im ViewModel-Trigger direkt zurück in die Datenschicht speichert. In einer JavaScript-App werden wir getrennt und selektiv mit AJAX auf dem Server gespeichert.

Die App, in der ich sie gerade benutze, ist MVC3 und ich bekomme absolut eine "Speichern" -Aktion auf meinen Controller, klicke auf eine "Speichern" -Schaltfläche irgendwo auf meiner Seite, poste das ganze ViewModel auf diese Speichern-Aktion und dann behalte das in der Datenbank bei. Aber was ist, wenn Sie eine schnelle Bearbeitung machen und sie dann erneut speichern? Oder was ist, wenn eine Schaltfläche zum Speichern nicht in den Designfluss passt? Stattdessen möchten Sie jedes Mal, wenn eine Änderung an dem Formular ohne Speichern-Schaltfläche vorgenommen wird, zu der Aktion posten? Die Ideen, die ich herumgeworfen habe, sind:

  • Veröffentlichen Sie das gesamte ViewModel jedes Mal, wenn Änderungen vorgenommen werden, und lassen Sie die Action herausfinden, was neu und was nicht ist (nicht ideal, besonders bei großen Modellen, wenn die Daten bei jedem Speichern unnötig groß sind) ).
  • Fügen Sie jedem Element im ViewModel eine Eigenschaft hinzu, die verfolgt, ob es seit dem letzten Speichern neu und / oder geändert wurde. Dann greife diese Elemente aus und poste nur diese auf dem Server (ich habe das nicht getestet, aber ich nehme an, dass dies mit der _destroy-Eigenschaft geschehen kann, wie es für eine Rails-App beabsichtigt ist).
  • In so viele kleinere ViewModels aufteilen, wie es plausibel ist, damit der Schmerz aus den ersten beiden Optionen minimiert wird (dies sollte wahrscheinlich unabhängig davon geschehen).
  • Ein anderer besserer Weg?

Ich bin zuversichtlich, dass es da draußen einige gute Ideen gibt, an die ich nicht gedacht habe. Es wäre genial, in der Lage zu sein, alles deklarativ zu binden UND trotzdem effizient zu speichern .

    
Jorin 14.04.2011, 23:59
quelle

3 Antworten

0

Die einzige andere Sache, die mir einfällt, ist Abonnieren . Als ich anfing, Ihren Beitrag zu lesen, dachte ich Flaggen mit Grep.

Bearbeiten: Besser noch, ko.utils.compareArrays sieht vielversprechend aus.

Hier ist ein funktionierendes Beispiel ..

Sie müssen nur noch Änderungen an den Werten der beibehaltenen Werte erkennen. Du bist aber gut unterwegs.

    
David Wick 20.04.2011, 05:23
quelle
5

Ich bin gerade von Mix11 zurückgekommen, wo ich diese Sitzung über Knockout.js besucht habe. Es könnte sich lohnen, Steve Sanderson dabei zuzusehen, wie er eine vollständige CRUD-Demo erstellt.

    
Paulczy 15.04.2011 15:08
quelle
0

Sie können das Mapping-Plugin für Knockout auschecken, damit Sie Knockout von einem JSON-Array laden können. Wenn es nicht zu groß ist, speichern Sie das Array auf einem Zeitgeber (oder nach einer Änderung) auf dem Server herunter. Hoffe, das hilft, Entschuldigung, wenn Sie das bereits wussten.

Ссылка

Ссылка

    
dylanized 16.05.2011 09:34
quelle

Tags und Links