MVVMベースのシングルページアプリケーションを実装しようとしていますが、MVVMのviewmodel/view部分を処理するためにフレームワークKnockout.jsを現在使用しています。私は混乱しています。ノックアウトを実装するために私が見てきたすべての例は、ビューモデル全体をデータベースに保存することを含みます。これらの例では、ビューモデルがデータレイヤーモデルと同期し、モデルが検証/サーバー同期を行う「モデル」ステップがありません。MVVM with Knockout.js
1つのページに複数の異なるテンプレート/ビューをそれぞれ別のビューモデルで作成したいと考えています。私が見つけたもう一つのことは、knockout.jsが異なるビュー間で単一のモデル(ビューモデルではない)を同期させていることです。すべてのビューが共有する1つの巨大なビューモデルを持つのは意味がないと思うので、各ビューには独自のビューモデルがあると考えていましたが、各ビューモデルは必要なアプリケーション規模のモデル各ビュー。
私が取り組んでいるページは、巨大なモデル(30以上のフィールド、親子関係の複数のレイヤー)を取得しています。私はすべてのビューモデルをこのモデルと同期させるのが理にかなっていると思います。私はknockout.js(knockout.jsとbackbone.jsを組み合わせたもの)を調査しましたが、ページがAPIからデータを取得しているので、fetch、set、saveなどの関数の大部分を書き直しました。モデル全体をサーバと前後に同期させるだけなので)、私はそれに反対して決めました。私のアプリケーションの
視覚的な例:
(モデル層) M | M
(ビューモデル/ビューレイヤー)VM-V | VM-V | VM-V | VM-V
例モデルはユーザー=あろう
別の例{firstNameの "最初" とLastName: "最後"、...}
1のviewmodelのみファーストネームが必要であり、別のviewmodelのみ姓を必要
ViewModelA = {firstNameの:app.User.firstName()}
ViewModelB = {firstNameの:app.User.lastName()}
モデルとビューモデルの変更のためのpub/subシステムを定義するためにこれを行う唯一の方法はありますか?これは良い/維持可能なアーキテクチャですか?ここに基本的なコンセプトがないのですか?すべてのアドバイスは大歓迎です
+1パブ/サブを言及するために+1、私はそれを言及することを忘れました。 – Tyrsius
まずは遅れていたJohnと@Tysiriusの返事をおかけして申し訳ありませんが、私は先週別のプロジェクトに参加しました。 私はあなたが提案しているDecoupled V/VM構造が本当に好きです。私は、あなたがSPAで "ページ"をどのようにしていても、全体的なモデルが永続するという考えが好きです。 私はそれを解釈すると、10個のフィールド(今はすべてko.observable())を持つモデルがあり、そのモデルの部分表現と同期する複数のビューモデル(いくつかのフィールドのみ)、そして「波紋」はすばらしく働いています。 –
それはあなたのために働くのがうれしいです。その実パターンIMO。 –