2011-04-14 17 views
9

私はKnockoutJSで遊んできましたが、クラックから落ちるのを防ぐことで、あらゆる角度からデザインを簡素化することが大好きです。私の質問は、サーバーにデータを保存するために推奨される「ベストプラクティス」は何ですか?私の理解では、接続されたMVVMでは、最初の "M"はデータレイヤーなので、ViewModelトリガーの依存関係の追跡と通知はデータレイヤーに直接保存されます。 JavaScriptアプリケーションでは、接続が解除され、AJAXを使用してサーバーに選択的に保存されます。MVVM/Knockoutjs Web Appの変更を保存する最も良い方法は?

私が現在使用しているアプリはMVC3で、私のコントローラに「保存」アクションを書いて、ページのどこかに「保存」ボタンを押し込んで、その保存アクションにViewModel全体を投稿する方法を絶対に得ます。それをデータベースに保存します。しかし、素早く編集してからもう一度保存するとどうなりますか?または、保存ボタンがデザインのフローに合わない場合はどうなりますか?代わりに、保存ボタンを一切持たずにフォームに変更が加えられるたびに、アクションに投稿したいのですか?

  • 変更が行われるたびにViewModel全体を投稿して、新しいものとそうでないものを把握します(特に大きなモデルの場合は、何もない場合そうでなければ、各保存時に送信されるデータが不必要に大きくなるためです)。
  • ViewModelの各項目にプロパティを追加します。プロパティは、最後の保存以降に新しい項目か変更された項目かを追跡します。その後、これらのアイテムをgrepしてサーバーにのみ送信します(これはテストしていませんが、これはRailsアプリケーション用の_destroyプロパティを使用して行うことができます)。
  • 最初の2つのオプションの痛みを最小限に抑えるため、可能な限り多くのViewModelに分割します(これはおそらく関係なく実行する必要があります)。
  • いくつかの他のより良い方法ですか?

私は考えていないいくつかの良いアイデアがあることを願っています。宣言的にすべてを束縛し、まだを保存するには、がすばらしいでしょう。

+0

あなたは(ASP.NET MVCのように)MVCとMVVMをconflatingています。どちらも基本的に同じパターンですが、MVVMにはWPFアプリケーションの設計に固有の変更があります。 – Will

+0

実際にKnockoutJS(http://knockoutjs.com)はMVVMパターンを使用しています。これはポスターが参照していたものです。 –

+0

恐ろしい質問です!ノックアウトのない同じ質問はおそらくもっと役立つでしょう。それはそこにある多くのJSフレームワークのほんの一例です。私はこの質問に対する答えを探し続けます。 – noocyte

答えて

0

私が考えることができる唯一の他のものはsubscribingです。私はあなたの記事を読んで始めたとき、私はフラグが/ grepを考えていた。

編集:さらに良いですが、ko.utils.compareArraysは有望です。

Here's作業例...

唯一のことはやって左に「留保」の値の値の変更を検出しています。あなたはあなたのところにうまくいます。

+0

うわー。 +1は優雅な実装であり、私は先に進んでこれを答えとしてマークします。質問は本質的にもっと理論的だったので、私はまだ他の方法があると確信していますが、例が設定されている方法は天才です。その実装にはまだ保存ボタンがありますが、クールな部分は必要ありません。何かがko.utils.compareArraysを引き起こす限り、気になる配列だけを選択的に投稿することができます。それはまさに私が興味があったものです。よくやった。あなたのご意見ありがとうございます。 – Jorin

+0

うれしかったです。 –

+3

リンクの例が壊れています...例がまだ利用可能な場合は?私はいくつかのレベルの関係を持っているビューモデルを持っています。私は保存に関するさまざまなオプションを探しています – littlechris

5

私は、Knockout.jsについてthis sessionに出席したMix11からちょうど戻ってきました。 Steve Sandersonが完全なCRUDデモを見ているのを見るのは貴重なことかもしれません。

+3

ええ、私は実際にオンラインで投稿されるとすぐにその素晴らしいデモを先週見ました。 Knockoutがクライアント側でできることを示す真のデモ。しかし、彼がサーバーに投稿したとき、クライアントに戻って実際にサーバーに行くことを示す以外は何もしませんでした。ペイロードを小さくしてコントローラを効率的に保ちながら、増分変更をサーバーに保存するときのベストプラクティスにもっと関心があります。 – Jorin

0

ノックアウトのマッピングプラグインをチェックすると、JSONアレイからノックアウトを読み込むことができます。大きすぎない場合は、その配列をタイマー上(または変更後)にサーバーに保存します。あなたがすでにこれを知っていれば、これは助けて欲しいです、ごめんなさい。

http://knockoutjs.com/documentation/plugins-mapping.html

http://knockoutjs.com/documentation/json-data.html

関連する問題