2011-06-28 2 views
11

私はもはや本当にasp mvc内の機能を必要としないので、knockoutjs(pure js/html)を使うために既存のasp mvc appを移植しようとしています。しかし私が考えることができる1つの問題は私が私のページのいくつかを扱う方法です。KnockoutJS - メインビュー内に複数の部分表示がありますか?

私は約12部分図が含まれている1ページ、各部分は、独自のモデルを持っています。

  • お客様詳細
  • お客様:今すぐノックアウトJSと、それはあなたが唯一の本当にページあたり1のviewmodel /ビューを持つべきであるように、しかし、私が持っているページは、大量の情報が含まれているようで、セクションでは、と同類だろう住所
  • カスタマー最近の注文
  • カスタマーカード
  • カスタマー・ファンド
  • ...

一部の詳細が一部変更された場合、処理が難しくなるためには、別の部分のデータを変更する必要があります。それで、カードを取り除いて、資金管理にカードがなくなったので、資金がないと言う必要があるとしましょう。 (これはすべて抽象的な例ですが、うまくいけばポイントを示しています)

私はノックアウトでこれを行う方法が少しわかります。それはむしろ1つの大きなモデルとして、それは多くの情報を含んでいます。複数のフォームだけでなく、他のものをすべて更新することなく住所を更新することができます。

このビューの1つの大きなモデルを作成してそれを処理するだけでよいですか?またはお互いに意見を交換する方法がありますか?

+0

Knockoutの一般的なチュートリアルは誰も持っていますが、私はマニュアルを少し短く見つけましたが、いくつかの小さな例しかありませんでした。デモアプリケーションのような重要なものはありません。複数のページなどで作業していたことを示しています... – somemvcperson

+0

デモアプリケーションのビットにいくつかのコンテキストを追加するだけで、サイトにはまともな例がいくつかありましたが、View ModelとViewを使用するように見えました。モデルではありませんでした。そうでなければそのVVMだけ... – somemvcperson

答えて

3

私の戦略は、1つの大きなビューモデルを使用することです。あなたがそれを置いても、部分的なビューはサーバー側の概念であり、すべてがクライアント側に転送されると、1ページに大量のデータ情報が存在します。

しかし、物事が管理しやすくするために、私はすべてのJavascriptの操作コードは、それ自身のパーシャルビューで書かれていることを確認してください。これにより、機能の追跡が容易になり、それぞれのコードになります。

だから、基本的に、あなたのメインの顧客配列オブジェクトは、メインページに移入して、詳細を移入するための関数を呼び出して、それぞれ部分図のそれぞれに定義されているアドレスなど。

+1

応答のおかげで、1つの大きなモデルスタイルについて私が心配していることの1つは、より大きなモデル(すなわち、アドレス、カード)内の各モデルが独立して保存されることです。しかし、私の最初の見た目からは、一度にモデル全体を保持するように見えました...これを行うためにカスタムを書く必要がありますか? saveCard(index)saveAddress(index)をサーバーに送信するメソッドとして公開するだけで簡単ですか? – somemvcperson

+0

本当にありません。より大きなモデルの下にモデルがある場合は、部分ビュー内でモデルを正しく参照するだけで済みます。 'Add Card'私は実際にそれをテストしていませんが、すべてを単一のビューモデルに入れてしまったためです。モデルの中にモデルはありません。正確には素晴らしい解決策ではありません。 – neebz

+2

Btw、私は、div内に部分的なビューをカプセル化し、 'ko.applyBinding(partialViewModel、" id of div ")'を呼び出すことで、複数のバインディングを適用できることに気付きました。 2番目のパラメータは、バインディングを適用する場所を示します。 – neebz

3

それはあなたが複雑なアプリケーションでは避けたいでしょう密結合が作成されますので、私は1つのモンスターのビューモデルを警戒でしょう。

よりよい解決策はko.subscribableの上のパブ/サブシステムを構築することです。ビューモデル間の通信は、さまざまなイベントへのサブスクリプションを管理することによって容易になります。それはもう少し先の仕事ですが、それは道のりで配当を支払うでしょう。

Hereが話題に拡張したブログ記事です。私はこのブログを強く勧めます。ノックアウト特有の課題と戦略のための素晴らしいリソースです。

関連する問題