Grałem z KnockoutJS i absolutnie uwielbiam, jak bardzo upraszcza to projektowanie pod każdym kątem, utrzymując rzeczy przed upadkiem przez szczeliny. Moje pytanie brzmi: jaka jest zalecana "najlepsza praktyka" do zapisywania danych z powrotem na serwer? Rozumiem, że w podłączonej MVVM pierwszym "M" jest warstwa danych, a więc śledzenie zależności i powiadomienia w wyzwalaczu ViewModel zapisuje się bezpośrednio z powrotem do warstwy danych. W aplikacji JavaScript jesteśmy odłączeni i selektywnie zapisujemy z powrotem na serwerze przy użyciu AJAX.Najlepszy sposób na zapisanie zmian w aplikacji sieciowej MVVM/Knockoutjs?
Aplikacja, w której aktualnie go używam to MVC3 i absolutnie mam pomysł, jak napisać akcję "Zapisz" na moim kontrolerze, umieść przycisk "Zapisz" gdzieś na mojej stronie, opublikuj cały ViewModel do tej akcji Zapisz a następnie utrzymywać to w bazie danych. Ale co powiesz, kiedy dokonasz szybkiej edycji, a następnie zapiszesz ją ponownie? A co, jeśli przycisk zapisu nie pasuje do przepływu projektu? Zamiast tego chcesz publikować w akcji za każdym razem, gdy zmiana jest wprowadzana w formularzu bez żadnego przycisku zapisu? Pomysły, które odniosłem, to:
- Przesyłaj cały ViewModel za każdym razem, gdy wprowadzane są zmiany, i spraw, aby Action figurowała jako nowa, a co nie (nie jest idealna, szczególnie dla dużych modeli, jeśli nic inaczej, ponieważ dane transmitowane przy każdym zapisie byłyby niepotrzebnie duże).
- Dodaj właściwość do każdej pozycji w ViewModel, która śledzi, czy jest nowa i/lub zmieniona od czasu ostatniego zapisu. Następnie, poszukaj tych elementów i opublikuj tylko te na serwerze (nie testowałem tego, ale zakładam, że można to zrobić za pomocą właściwości _destroy, zgodnie z przeznaczeniem dla aplikacji Rails).
- Należy oddzielić na tyle mniejszych modeli ViewModels, ile jest prawdopodobne, aby jakikolwiek ból z pierwszych dwóch opcji był zminimalizowany (prawdopodobnie należy to zrobić niezależnie).
- Jakiś inny lepszy sposób?
Mam nadzieję, że istnieje kilka dobrych pomysłów, o których nie pomyślałem. Aby móc deklaratywnie wiązać wszystko i nadal skutecznie oszczędzać byłby świetny.
Jesteś utożsamiając MVC (jak w ASP.NET MVC) i MVVM. Oba są w zasadzie tym samym wzorcem, ale MVVM ma zmiany specyficzne dla projektowania przeciwko aplikacjom WPF. – Will
Właściwie KnockoutJS (http://knockoutjs.com) wykorzystuje wzorzec MVVM, który jest również tym, o czym mówił plakat. –
Niesamowite pytanie!To samo pytanie bez Knockout byłoby być może jeszcze bardziej przydatne, ponieważ jest to jedna z wielu, wielu frameworków JS. Będę kontynuować poszukiwania dla odpowiedzi na to pytanie. – noocyte