3

私は MVC を開始しています。この投稿のおかげで、モデルと ViewModel の違いを理解しています。

http://rachelappel.com/use-viewmodels-to-manage-data-amp-organize-code-in-asp.net-mvc-applications

しかし、これを同僚に見せたところ、ノックアウトを使用してビューをモデルにバインドする代わりになるという印象を受けました。誰かがこれを説明できますか?ノックアウト バインディングは、ViewModel クラスをプロパティで定義するのと同じことを行いますか?

ありがとうございました!

4

3 に答える 3

5

慣例では、Knockout view-model をクライアント側として使用し、MVC view-model をサーバー側として使用できます。

あなたの質問:どちらを使用するかをどのように決定しますか?

回答 :両方を並行して使用できます。つまり、単一のcshtmlページにノックアウト ビュー モデルを含めることができることを意味します。これには、プロパティと機能の両方がユニットとして含まれています。このビュー モデルは、クライアント側に必要な動作を示します。機能。

    //This is a simple Viewmodel
    //JavaScript that defines the data and behavior of your UI
    function AppViewModel() {
        var self = this;
        self.firstName = ko.observable();
        self.lastName = ko.observable();

        self.fullName = ko.computed(function () {
            return self.firstName() + " " + self.lastName();
        });

        self.capitalizeLastName = function () {
            var currentVal = self.lastName();//Read the current value
            self.lastName(currentVal.toUpperCase());//Write back a modified value
        };
    }

ただし、サーバー側の動作を表示するには、MVC ビューモデルでより複雑な (またはより多くのプロパティ) を使用できます。これは、データベースからデータを取得し、それらのデータをビューに表示するためのものです。

結論: MVC を使用する場合、両方のビューモデルを同時に使用できます。

重要な注意:ただし、両方のシナリオで単一のビューモデルを使用する必要がある場合は、そのこともできますKnockoutJS Mapping plugin

以下のように使えます。

<script src="~/Scripts/knockout.mapping-latest.js"></script>
 <script type="text/javascript">
        $(function() {
            var viewModel = ko.mapping.fromJS(@Html.Raw(Model.ToJson()));
            ko.applyBindings(viewModel);
          });
</script> 

ページの読み込みを高速化するために、ASP.Net MVC から KnockoutJS ビュー モデルを読み込むから詳細を取得できます。

Knockout について詳しく知りたい場合は、learn.knockoutjsを確認してください。

これがお役に立てば幸いです。

于 2013-01-17T19:52:09.137 に答える
3

ノックアウト ビュー モデルはクライアント側であり、MVC はサーバー側です。これが大きな違いです。

Knockout を使用すると、単一ページのアプリケーションを作成でき、クライアント側でロジックをカプセル化できます。

MVC の ViewModel は、ページをレンダリングしてポストバックを処理するためにサーバー側でのみ機能します。

于 2013-01-17T18:39:01.860 に答える
0

Xharzeの回答は有効ですが...

クライアント側では実行できないビュー関連のロジックをビジネスエンティティに追加する必要がある場合は、サーバー側のビューモデルが必要です。そうでない場合、それらは冗長になります。

従来の MVC とはまだ違いがあります。これらのサーバー側モデルは、サーバー側コンテンツのレンダリングには使用されず、REST を使用してクライアント側 KO エンジンに公開されます。

于 2013-01-17T19:33:27.457 に答える