MVVMベースのシングルページアプリケーションを実装しようとしていますが、現在、フレームワークKnockout.jsを使用してMVVMのviewmodel/view部分を処理しています。ただし、Knockoutを実装するために見たすべての例では、ビューモデル全体をデータベースに保存する必要があるため、混乱しています。これらの例では、ビューモデルがデータレイヤーモデルと同期し、モデルが検証/サーバー同期を行う「モデル」ステップが欠落していませんか。
1つのページに複数の異なるテンプレート/ビューをそれぞれ異なるビューモデルで表示したいと思います。私が見つけたもう1つのことは、knockout.jsに欠けていることです。それは、異なるビュー間で単一のモデル(viewmodelではない)を同期することです。すべてのビューが共有する1つの巨大なビューモデルを持つことは意味がないと思うので、各ビューには独自のビューモデルがあると思っていましたが、各ビューモデルは、に必要ないくつかのアプリケーション全体のモデルのフィールドと同期します各ビュー。
私が取り組んでいるページは巨大なモデル(30以上のフィールド、親子関係の複数のレイヤー)をフェッチし、すべてのビューモデルをこのモデルと同期させるのは理にかなっていると思います。Knockback.js(knockout.jsとbackbone.jsを組み合わせたもの)を調査しましたが、ページがAPIからデータを取得しているため、フェッチ、設定、保存などの関数の大部分を書き直すことになりました(モデル全体をサーバーと前後に同期するだけではないので、私はそれに反対することにしました。
私のアプリケーションの視覚的な例:
(モデルレイヤー)M | M
(ビューモデル/ビューレイヤー)VM-V | VM-V | VM-V | VM-V
もう一つの例
モデルの例は、User = {firstName: "first"、lastName: "last"、...}
1つのビューモデルには名のみが必要であり、別のビューモデルには姓のみが必要です
ViewModelA = {firstName:app.User.firstName()}
ViewModelB = {firstName:app.User.lastName()}
モデルとビューモデルの変更のためにpub/subシステムを定義するためにこれを行う唯一の方法はありますか?これは、優れた/保守可能なアーキテクチャでもありますか?ここで基本的な概念が欠けていますか?すべてのアドバイスを歓迎します。