私はノックアウト.jsが初めてです。少し前に、ko の見出し機能を読みました。ko が本当に MVVVM なのか理解できませんでしたか? 彼らが話しているのは、データ バインディングとその容易さだけだからです。しかし、MVVM はデータ バインディング以上のものだと確信していますね。
3 に答える
はい、knockout.js は MVVM パターンを適用します。ドキュメントで説明されています:
モデル: アプリケーションの保存データ。このデータは、ビジネス ドメイン (送金を実行できる銀行口座など) のオブジェクトと操作を表し、どの UI からも独立しています。KO を使用する場合、通常、サーバー側のコードに対して Ajax 呼び出しを行い、この格納されたモデル データを読み書きします。
ビュー モデル: UI 上のデータと操作の純粋なコード表現。たとえば、リスト エディターを実装している場合、ビュー モデルはアイテムのリストを保持し、アイテムを追加および削除するメソッドを公開するオブジェクトになります。
これは UI そのものではないことに注意してください。ボタンや表示スタイルの概念はありません。永続化されたデータ モデルでもありません。ユーザーが操作している保存されていないデータを保持します。KO を使用する場合、ビュー モデルは HTML の知識を持たない純粋な JavaScript オブジェクトです。このようにビュー モデルを抽象化することで、シンプルなままにすることができるため、迷うことなくより洗練された動作を管理できます。
ビュー: ビュー モデルの状態を表す、目に見えるインタラクティブな UI。ビュー モデルからの情報を表示し、ビュー モデルにコマンドを送信し (ユーザーがボタンをクリックしたときなど)、ビュー モデルの状態が変化するたびに更新します。
KO を使用する場合、ビューは、ビュー モデルにリンクするための宣言バインディングを含む単なる HTML ドキュメントです。または、ビュー モデルのデータを使用して HTML を生成するテンプレートを使用できます。
すでに提供されている回答に加えて、留意すべき点がいくつかあります -
MVVM
Knockout が MVVM である理由は、関心の適切な分離がサポートされているためです。jQuery などの他の JavaScript ライブラリとは異なり、ビューに関係のないものでビューを汚染しないことが目標です。
のview model
目的を理解することが重要です。ビューにデータを提供するために必要なロジックのみが内部に配置されるため、DOM を操作しようとしません。
のview
目的は、データを表示 (レンダリング) することだけです。ロジック、検証、またはその他のロジック コードはここには入りません。
ノックアウトが少しトリッキーになる唯一のmodel
場所です。Knockout を使用するためにプロジェクトに別の を配置することは一般的に受け入れられた方法model
ですが、多くの開発者は を に簡単に混合できることに気付きましmodel
たview model
。この理由は明らかです (一部model
の は非常に基本的なものです) が、これも実装が容易でないためです。
MVC 対 MV*
確かに SO.com には が何であるかを答えようとする他の回答がありますがMV*
、ここに 0.02 ドルを投入したかったのです - 他のライブラリまたはフレームワークは、MVC
またはMVP
またはMV(whatever)
ベースであるという事実を語っていますが、私が見つけたのは Knockout だけです。それはこの点で説教することを実践します。時間と希望があれば、Angular や Ember などの他のフレームワークの構造を見ると、存在する境界線がぼやけていることがわかります。多かれ少なかれ、それらは単純にMVVM
ベース パターンを使用していますが、それを別のものと呼んでいます。
可能だと思いますが、すべてのスタイリングと UI レイアウト操作がノックアウト js ViewModel ファイルで行われるプロジェクトに取り組んでいますが、これは良い習慣ではありません。