4

私は MVC アプリケーションを作成していますが、Knockout.js が多くの問題を解決してくれると判断しましたが、そのプロセスを除いて、問題を解決しなければならない新しい問題が発生しました。

すべての MVC エンドポイントを変換して、ビューを返すだけにしてから、JSON オブジェクトを返す他のいくつかのエンドポイントを作成しました。ユーザーが Web サイトを参照すると、サイトは基本的な UI フレームを読み込みます。その後、Knockout.js は AJAX 呼び出しを介してモデルを読み込みます。これにより、すべてのページがロードされ、MVC だけでページがロードされ、すべてのデータが存在する場合と同様に、再び「ロード」されます。

両方を同時にロードする方法を検討してきましたが、サイトを完全にリファクタリングする必要のない方法は見つかりませんでした。最良の選択肢は次のとおりです。

  • JSON エンドポイントをビュー エンドポイントにマージし、分離コードでモデルを JSON に変換します。@Html.Raw(Json.Encode(object))

しかし、その後、純粋な JSON エンドポイントをすべて処理する必要があります。

JSON エンドポイント データをサーバー側のビューに渡すために他にできることはありますか? または、モデルとビューを同時にロードする方法はありますか?

4

2 に答える 2

3

アーキテクチャは正しいですが、初期ロードでビューにモデルからのデータを事前入力する必要があります。ビューを返すだけのコントローラー アクション内で、ViewData に入力するデータを配置する必要があります。次に、ビューは最初にモデル値とともにロードされ、各 UI 要素は、その特定のフィールドのコントローラー アクションを呼び出す AJAX 更新を持つことができます。

これは、 ViewModel の理想的なケースでもあります。これも役立つかもしれませ

于 2012-04-21T20:21:02.677 に答える
1

また、最初のビュー生成で初期データをビューに直接レンダリングすることをお勧めすることにも同意します。一般に、これは別の AJAX 呼び出し + JavaScript を後でデータに入力するよりも優れたパフォーマンスをもたらします。

しかし、これはロードしているページのタイプにも大きく依存すると思います。アプリが主に AJAX ベース (SPA スタイル モデル) である場合、最初の読み込みは 1 回しか行われないため、おそらくそれほど重要ではありません。AJAX または従来のビュー操作のいずれかを介してすべてのデータを一方向にロードする方が、やや簡単で一貫性があります。また、クライアント側のコードでリストまたはレコードのデータ セット全体を再ロードする必要がある場合でも、その出力を生成するためにテンプレート/ビュー ロジックを複製する必要はありません。

于 2012-04-22T00:17:58.470 に答える