2

インタラクティブなフォームやその他の種類の Web ページを作成する場合、knockoutjs にはいくつかのオプションがあります。厳密に型指定されたビューを作成し、コントローラーからモデルを渡すことができます。一方、単純な古い html ドキュメントから簡単に開始し、初期ロード後にアクション メソッド (JsonResult など) を呼び出して初期化することもできます。

また、ページを MVC ビューとして開始するときは、HtmlHelpers をプレーンな古い html マークアップと共に使用して、ビューを初期化できます。もう 1 つのオプションは、モデルの状態を json として隠しフィールドにシリアル化し、それを使用してビューを初期化することです。

私の経験では、最初のロード中に ko でビューを初期化すると遅延が発生する可能性があります。シリアル化された非表示フィールドから json を渡してビューモデルを構築する場合でも、それに依存してさまざまなサービスを呼び出してデータをロードする場合でも、ページが「準備完了」になるまでに少し時間がかかります。この種の遅延は、HtmlHelpers などを使用してページを初期化することで回避できますが、そのような初期化には追加のコストが発生する可能性もあります (コントローラーの追加の初期化ロジック、ビューのデフォルト コンテンツなど)。

ページを初期化する方法として最も MVVM が多いのはどれですか? ビューで HtmlHelpers を使用すること、または cshtml を使用することは悪い考えですか? そうでない場合、ビューとビューモデルの間の線をどこに引きますか?

4

1 に答える 1

2

「MVVM が最も多い」というのは答えにくい質問です。特に、既に MVC と Knockout を組み合わせたパターンを使用していることを考えるとなおさらです。

Knockout にすべての初期化作業を行わせるのは「最も MVVM」になると思いますが、問題が発生したときにパターンに厳密に従うことはお勧めできません。DOM の準備ができた後に値を KO に設定するとHtmlHelpers、ページを初期化することで修正できる問題が発生する場合は、動作することを行います。では属性を同時にHtmlHelpers設定できるので、これは良い解決策のように感じます。私は以前にこれを実行して、良い結果を得ました。data-bind

ただし、非表示フィールドに JSON を格納することはお勧めできません。JavaScript でこれを使用して、モデルを JSON に直接エンコードできます。

var initialData = @Html.Raw(Json.Encode(Model));

ページはコントローラーが送信するデータで開始されるため、2 番目の要求を必要としないため、これは良い解決策です。

どのようなトレードオフを行うかを考える必要があるかもしれません。純粋でコードの重複を避けたい場合は、ページの初期化に少し時間がかかる KO の問題を受け入れる必要があるかもしれません。完璧なユーザー エクスペリエンスが必要な場合は、純粋さを少し犠牲にする必要があるかもしれません。

于 2012-07-12T22:56:37.973 に答える