2012-02-08 10 views
34

私はBackbone.jsを初めて利用しています。私はその文書を読んだ。私の質問は ですコントローラのコンセプトはどこにありますか?つまり、Backbone.jsのコントローラは何ですか?Backbone.jsのコントローラ

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

答えて

39

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

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

これには、これを達成するための3つの異なる方法があります。最初のものは、ビューにプロパティとしてモデルオブジェクトを含めることはかなり簡単です。

第2のものは、オーケストレーションのこの役目を果たす第3のコンポーネントを含むことを提案する。私はこれがかなり大きくて複雑なアプリケーションに役立つと信じています。このため、Backbone.jsを使用したサンプルアプリケーションアーキテクチャのChaplinを参照することをお勧めします。みんなは物事を分離する上で素晴らしい仕事をしてくれましたし、コントローラのコンセプトもアーキテクチャに導入しました。

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

7

iOS Cocoa Touchフレームワークの仕組みと似ていますが、バックエンドMVCのように考える必要はありません。バックボーンチームはバックエンドMVCからの混乱を避けるために、 。バックボーンのビューは、iOSでViewController/AppControllerと呼ばれるもので、通常、メインのAppControllerは、アプリケーションのメインラッパーを設定するビューになります。通常、メインのアプリケーションロジック用のグローバルパブ/サブシステムとコントローラーとしても使用します。 。

ルータはルートをパラメータのセットに変換し、それらをアプリケーションコントローラに渡して、それらの処理方法、ロードするサブビューなどを把握します(アプリケーションがあまり複雑でない場合はロードできます) /ルータのレベルからまっすぐビューを変更する) - それはコントローラと呼ばれていましたが、この混乱をクリアするために(私は信じていますか?)で名前が変更されました。

少なくともこれは我々のアプローチです。野生で複数のチュートリアルを確認した場合、おそらく、Backboneには多くの開発者がいるのと同じ方法があります。それがバックボーンの美しさです。 :)

11

は、クライアント上のMV *上のアディOsmani`sの記事をチェックアウト:

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

記事から:骨格中

、1株を持つコントローラの責任をBackbone.ViewとBackbone.Routerの両方です。この点で

、公式ドキュメントやブログの記事で言及したかもしれないものに反して、バックボーンは本当にMVC/MVPもMVVMフレームワークでもありません。

+4

こんにちは、回答自体に最も関連性の高いコンテンツを引用してください... –

2

通常、私は自分のコントローラーを作って、ルーターにそのことをさせます(ルートを捕まえ、コントローラーの動作を指示します)。これらのコントローラは家庭で作られたもので、メソッドを持つjavascriptオブジェクトだけです。彼らはルータから要求を受け取り、適切なデータ(コレクション、モデルなど)を収集し、必要なビューを取得し、それらを結合してビューにデータを渡します。

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

しかし、最近私はアークスbackboneMVCと呼ばれるサードパーティのバックボーンプラグインに来ました。それを読んだことがありますが、まだそれを試してはいけません。

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

私はまだそれを使って何かを構築していないので、私は何も約束できません。