web-dev-qa-db-ja.com

Backbone.jsのコントローラー

Backbone.jsは初めてです。ドキュメントを確認しました。私の質問は、コントローラーのコンセプトがどこに現れるのかということです。つまり、Backbone.jsのコントローラーとは何ですか?

ルーターがコントローラーだそうです。もしそうなら、なぜそれがコントローラーと見なされるのですか?ルーターなしでシンプルな基本アプリを開発することもできますか?その場合、コントローラーは何になりますか?

34
asura

ここを少しクリアします。ルーターはコントローラーではなく、クライアント側のルートマップを定義する方法です(Railsのroutes.rbに似ています)。これは、クライアント側のページを特定のアクション/ハンドラーにルーティングするのに役立ちます。これは、モデルとビューの間に少しのオーケストレーションを提供するコントローラーの仕事とは異なります。そして実際には、Backboneを使用してこれを行う方法が複数あります。 バックボーンのドキュメント からの引用:

モデルとビュー間の参照は、いくつかの方法で処理できます。ビューがモデル(model.viewとview.model)と1対1で対応するダイレクトポインターが欲しい人もいます。他の人は、ビューの作成と編成を階層に編成する中間の「コントローラ」オブジェクトを好む。他の人はまだイベントによるアプローチを好み、メソッドを直接呼び出す代わりに常にイベントを発生させます。これらのスタイルはすべてうまくいきます。

これは、これを達成するために3つの異なるアプローチをもたらします。 1つ目は、モデルオブジェクトをプロパティとしてビューに含めることです。

2つ目は、オーケストレーションのこの役割を実行する3つ目のコンポーネントを含めることを提案しています。これは非常に大きく複雑なアプリケーションで役立つと思います。このため、Backbone.jsを使用したサンプルアプリケーションアーキテクチャである Chaplin を確認することをお勧めします。彼らは物事を分離することにおいて素晴らしい仕事をし、そしてコントローラーにコントローラーの概念をアーキテクチャに導入しました。

最後のアプローチは、イベントを使用してアクションをマークし、メディエーターを使用してこれらのアクションを処理することを提案しています。このため、メディエーターとパブリッシュ/サブスクライブJavaScriptパターンを調べることをお勧めします。

40
badawym

クライアントのMV *に関するAddy Osmaniの記事をご覧ください。

http://addyosmani.com/blog/understanding-mvc-and-mvp-for-javascript-and-backbone-developers/

記事から:

Backboneでは、コントローラーの責任をBackbone.ViewとBackbone.Routerの両方と共有します。

そして

この点で、公式のドキュメントやブログの投稿で言及されていることに反して、Backboneは真のMVC/MVPでもMVVMフレームワークでもありません。

12
Radek

これは、たとえばiOS Cocoa Touchフレームワークがどのように機能するかに似ています。バックエンドMVCのように考えるべきではありません。バックボーンチーム自体は、バックエンドMVCから来るときによくある混乱を避けるために、WebサイトでMVCについて言及することさえありません。バックボーンのビューは、iOSのViewController/AppControllerと呼ばれるものであり、通常、メインのAppControllerは、アプリケーションのメインラッパーを設定するビューであり、通常は、メインのアプリロジックのグローバルpub/subシステムおよびコントローラーとしても使用されます。 。

ルーターはまさにそれが言うことです-ルートを一連のパラメーターに変換し、それらをアプリコントローラーに渡して、何をするか、どのサブビューをロードするかなどを把握します(または、アプリケーションが高度でない場合は、ビューをロード/変更できます)ルーターレベルから直接)-以前はコントローラーと呼ばれていましたが、この混乱を解消するために(0.5と思いますか?)に改名されました。

少なくともこれが私たちのアプローチです。実際に複数のチュートリアルをチェックした場合、バックボーンに関しては、多くの開発者と同じくらい多くのアプローチがあることがわかります。そして、それがバックボーンの美しいところです! :)

7
Tom Tu

通常、私は自分のコントローラーを作成し、ルーターにそれをさせます(ルートをキャッチし、コントローラーアクションを指す)。これらのコントローラーは自家製であり、メソッドを備えたjavascriptオブジェクトです。ルーターからリクエストを受け取り、適切なデータ(コレクション、モデル...)を収集し、必要なビューを取得してそれらを結合し、データをビューに渡します。

そこから再びバックボーンです。

しかし最近、arcossに backboneMVC というサードパーティのバックボーンプラグインが登場しました。ドキュメンテーションを読んだことがあるが、まだ自分で試していない。

それはあなたのルーターを引き継ぎ、あなたがそれで定義するあなたのコントローラーとアクションに基づいてルートを作ることを目指しています。

そのライブラリを見てください。ただし、自分で何かを作成する必要があるため、何も約束できません。

3
Sander