私のサイトhttp://documentcloud.github.com/backboneからbackbone.jsのユーティリティを理解しようとしましたが、それでも多くのことを理解することはできませんでした。
誰かがそれがどのように機能するか、そしてそれがより良いJavaScriptを書くのにどのように役立つかを説明することで私を助けることができますか?
私のサイトhttp://documentcloud.github.com/backboneからbackbone.jsのユーティリティを理解しようとしましたが、それでも多くのことを理解することはできませんでした。
誰かがそれがどのように機能するか、そしてそれがより良いJavaScriptを書くのにどのように役立つかを説明することで私を助けることができますか?
回答:
Backbone.jsは、基本的に、JavascriptコードをMVC(モデル、ビュー、コントローラー)方式で構造化できる超軽量フレームワークです...
モデルは、データを取得して入力するコードの一部であり、
ビューはこのモデルのHTML表現です(モデルの変更に応じてビューも変更されます)。
この場合、オプションのControllerを使用して、Javaアプリケーションの状態をハッシュバングURLで保存できます。例:http : //twitter.com/#search? q=backbone.js
私がバックボーンで発見したいくつかのプロ:
Javascript Spaghettiはもうありません。コードは整理され、意味的に意味のある.jsファイルに分解され、後でJAMMITを使用して結合されます。
これ以上jQuery.data(bla, bla)
:DOMにデータを格納する必要はなく、代わりにモデルにデータを格納します
イベントバインディングが機能する
非常に便利なアンダースコアユーティリティライブラリ
backbone.jsコードは十分に文書化されており、読みやすくなっています。多くのJSコード手法に目を向けました。
短所:
以下は、バックボーンとしてRailsでBackboneを使用するための一連の優れたチュートリアルです。
CloudEdit:Railsを使用したBackbone.jsチュートリアル:
http://www.jamesyu.org/2011/01/27/cloudedit-a-backbone-js-tutorial-by-example/
http://www.jamesyu.org/2011/02/09/backbone.js-tutorial-with-rails-part-2/
ps モデルのコレクションを処理し、ネストされたモデルを模倣できるこの素晴らしいコレクションクラスもありますが、最初から混乱させたくありません。
ɯnɯıuıɯ ʇunoɔ ɹǝʇɔɐɹɐɥɔ
data-
、DOM要素に属性を設定し直しません。(つまりdata-
、ページが読み込まれたときにHTMLに属性があり、それらが変更された場合、DOMとメモリ内の表現はOOSになりますが、とにかくメモリ内データで作業する必要があります)
ブラウザーで複雑なユーザーインターフェイスを構築する場合、Backbone.jsやSammy.jsなどのフレームワークを構成するほとんどの要素を最終的に発明していることに気付くでしょう。したがって、問題は、ブラウザでそれを使用するに値するほど複雑なものを構築しているかどうかです(そのため、自分で同じものを発明することにはなりません)。
ビルドする予定のUIが定期的に表示方法を変更するものの、サーバーにアクセスして新しいページ全体を取得しない場合は、 Backbone.jsやSammy.jsなどが必要になる可能性があります。そのようなものの基本的な例は、GoogleのGmailです。これを使用したことがある場合は、最初にログインしたときにHTML、CSS、JavaScriptの大きなチャンクが1つダウンロードされ、その後、すべてがバックグラウンドで実行されることに気付くでしょう。新しいページ全体をレンダリングするように要求することなく、電子メールの読み取りと受信ボックスの処理、検索、およびそれらすべての検索の間を移動できます。
これらのフレームワークが開発を容易にする優れたアプリです。それらがなければ、機能の一部(たとえば、履歴管理用のjQuery BBQ、イベント用のEvents.jsなど)を取得するために、個々のライブラリの多様なセットをまとまってしまうか、すべてを自分で構築することになります。自分ですべてを維持し、テストする必要もあります。それとは対照的に、Githubで何千人もの人が見ているBackbone.jsのようなもの、何百人もの人が作業している可能性のあるフォーク、何百もの質問がここでStack Overflowで既に行われ、回答されています。
ただし、フレームワークに関連する学習曲線に見合うだけの複雑さを構築する予定がない場合は、どれも重要ではありません。PHP、Java、またはその他のサイトを構築していて、ユーザーからの要求に応じてバックエンドサーバーがWebページの構築のすべての重い作業を行っており、JavaScript / jQueryがそのプロセスに集中している場合は、 t Backbone.jsが必要になるか、まだ準備ができていません。
...コードの整理に役立つコンポーネントの非常に小さなライブラリ。単一のJavaScriptファイルとしてパッケージ化されています。コメントを除いて、実際のJavaScriptは1000行未満です。それは賢明に書かれていて、数時間で全部を読むことができます。
これはフロントエンドライブラリであり、スクリプトタグを使用してWebページに含めます。これはブラウザにのみ影響し、サーバーについてはほとんど言及しませんが、Restful APIを公開することが理想的です。
APIを使用している場合、Backboneには、APIとの対話に役立ついくつかの便利な機能がありますが、Backboneを使用して、静的HTMLページに対話機能を追加できます。
... JavaScriptに構造を追加します。
JavaScriptは特定のパターンを強制しないため、JavaScriptアプリケーションは非常に乱雑になる可能性があります。JavaScriptで些細なことを超えて何かを作成した人は、おそらく次のような質問に遭遇するでしょう。
バックボーンはあなたにこれらの質問に答えようとします:
これをMV *パターンと呼びます。モデル、ビュー、オプションの追加機能。
初期の外観にもかかわらず、バックボーンは素晴らしく軽量で、ほとんど何もしません。それが行うことは非常に役立ちます。
作成できる小さなオブジェクトのセットを提供し、イベントを発行して互いにリッスンできます。たとえば、コメントを表す小さなオブジェクトを作成してから、ブラウザの特定の場所でのコメントの表示を表す小さなcommentViewオブジェクトを作成します。
コメントを聞いて、コメントが変更されたときに自分自身を再描画するようにcommentViewに指示できます。同じコメントがページの複数の場所に表示されている場合でも、これらのビューはすべて同じコメントモデルをリッスンして、同期を保つことができます。
このようにコードを構成する方法は、コードベースが非常に大きくなり、多くの相互作用が発生した場合でも、絡まないようにするのに役立ちます。
最初は、データをグローバル変数に格納するか、DOMにデータ属性として格納するのが一般的です。。これらの両方に問題があります。グローバル変数は互いに競合する可能性があり、一般に悪い形式です。DOMに格納されているデータ属性は文字列のみです。それらを再度解析および解析する必要があります。配列、日付、オブジェクトなどを格納し、構造化された形式でデータを解析することは困難です。
データ属性は次のようになります。
<p data-username="derek" data-age="42"></p>
バックボーンは、データと関連するメソッドを表すモデルオブジェクトを提供することでこれを解決します。ToDoリストがあるとすると、そのリストの各項目を表すモデルがあるとします。
モデルが更新されると、イベントが発生します。その特定のオブジェクトに関連付けられたビューがある場合があります。ビューはモデル変更イベントをリッスンし、それ自体を再レンダリングします。
バックボーンは、DOMと通信するViewオブジェクトを提供します。DOMを操作したり、DOMイベントをリッスンしたりするすべての関数がここに配置されます。
ビューは通常、ビュー全体またはビューの一部を再描画するレンダリング関数を実装します。render関数を実装する義務はありませんが、それは一般的な慣習です。
各ビューはDOMの特定の部分にバインドされているため、検索フォームのみをリッスンするsearchFormViewと、ショッピングカートのみを表示するshoppingCartViewがある場合があります。
ビューは通常、特定のモデルまたはコレクションにもバインドされます。モデルが更新されると、ビューがリッスンするイベントが発生します。ビューはレンダーを呼び出して、自分自身を再描画する場合があります。
同様に、フォームに入力すると、ビューでモデルオブジェクトを更新できます。そのモデルをリッスンする他のすべてのビューは、独自のレンダリング関数を呼び出します。
これにより、問題を明確に分離して、コードをきちんと整頓できます。
レンダリング関数は、必要に応じて任意の方法で実装できます。DOMを手動で更新するために、jQueryをここに配置するだけかもしれません。
テンプレートをコンパイルして使用することもできます。テンプレートは、挿入ポイントを持つ文字列です。それをJSONオブジェクトと共にコンパイル関数に渡し、DOMに挿入できるコンパイルされた文字列を取得します。
モデルのリストを格納するコレクションにもアクセスできるため、todoCollectionはtodoモデルのリストになります。コレクションがモデルを取得または失ったとき、その順序を変更したとき、またはコレクション内のモデルが更新されたとき、コレクション全体がイベントを発生させます。
ビューはコレクションをリッスンし、コレクションが更新されるたびにそれ自体を更新できます。
たとえば、コレクションに並べ替えとフィルターのメソッドを追加し、それ自体を自動的に並べ替えることができます。
可能な限り、アプリケーションコンポーネントは互いに分離されています。それらはイベントを使用して通信するため、shoppingCartViewはshoppingCartコレクションをlistenToし、カートが追加されると自分自身を再描画します。
shoppingCartView.listenTo(shoppingCart, "add", shoppingCartView.render);
もちろん、他のオブジェクトもshoppingCartをリッスンしている可能性があり、合計を更新したり、状態をローカルストレージに保存したりすることもあります。
このようにオブジェクトを分離し、イベントを使用して通信することで、結び目に巻き込まれることがなくなり、新しいコンポーネントや動作の追加が簡単になります。新しいコンポーネントは、システムにすでに存在する他のオブジェクトをリッスンするだけです。
バックボーン用に書かれたコードは、大まかな規則に従っています。DOMコードはビューに属します。コレクションコードはコレクションに属しています。ビジネスロジックはモデルに入ります。別の開発者がコードベースを入手すると、実行を開始できます。
バックボーンは、コードに構造を与える軽量のライブラリです。コンポーネントは分離され、イベントを介して通信するため、混乱することはありません。新しいオブジェクトを作成し、既存のオブジェクトを適切にリッスンさせるだけで、コードベースを簡単に拡張できます。あなたのコードはよりクリーンで、より良く、そしてより保守しやすくなります。
私はバックボーンがとても好きだったので、それについて少しイントロ本を書きました。ここでオンラインで読むことができます:http : //nicholasjohnson.com/backbone-book/
また、資料を短いオンラインコースに分割しました。このコースは、http://www.forwardadvance.com/course/backboneで見つけることができます。約1日でコースを修了できます。
ここに興味深いプレゼンテーションがあります:
ヒント(スライドから):
Backbone.jsは、コードの整理に役立つJavaScriptフレームワークです。これは文字通り、アプリケーションを構築するためのバックボーンです。ウィジェット(jQuery UIやDojoなど)は提供していません。
これは、サーバー上のRESTfulエンドポイントとインターフェースするクリーンなJavaScriptコードを作成するために拡張できる基本クラスのクールなセットを提供します。
これはかなり良い紹介ビデオです:http : //vimeo.com/22685608
RailsとBackboneについてさらに詳しく知りたい場合、Thoughtbotにはこのかなり良い本(無料ではありません)があります。https: //workshops.thoughtbot.com/backbone-js-on-rails
私は、MVCのすべての「利点」が私の作業を簡単に、より速く、またはより良くしたことは決してないことを認めなければなりません。コーディング全体のエクスペリエンスがより抽象的で時間のかかるものになります。分離が何を意味するかについて他の誰かの概念をデバッグしようとするとき、メンテナンスは悪夢です。MVCモデルとしてCairngormを使用したFLEXサイトを更新しようとした人の数はわかりませんが、更新に30秒かかるはずの場合、多くの場合2時間以上かかることがあります(単一のイベントを見つけるためだけに、ハンティング/トレース/デバッグ) )。MVCは、私にとって、あなたが詰め込める「利点」でしたし、今でもそうです。
これが私がBackboneJSで書いたクイックスタートの投稿です。それが役に立てば幸い! http://www.infragistics.com/community/blogs/nanil/archive/2013/04/01/exploring-javascript-mv-frameworks-part-1-hello-backbonejs.aspx
backbone.jsはJavaScriptを備えたModel-View-Controller(MVC)です が、Extjsは javaスクリプトによるMVCパターンのバックボーンよりも優れています
バックボーンを使用すると、ほぼすべてのことを自由に行うことができます。APIをフォークしてカスタマイズしようとするのではなく、シンプルさと実装の容易さのためにBackbonejsを使用します。繰り返しになりますが、2つのうち1つはライブラリであり、もう1つはコンポーネントです。
Backboneは、CoffeeScriptを執筆したJeremy Ashkenasによって作成されました。JavaScriptを多用するアプリケーションとして、バックボーンとして現在知られているのは、アプリケーションを首尾一貫したコードベースに構築することです。バックボーンの唯一の依存関係であるUnderscore.jsもDocumentCloudアプリケーションの一部でした。
バックボーンは、開発者がクライアント側のWebアプリでデータモデルを管理するのに役立ちます。これは、従来のサーバー側のアプリケーションロジックで行うのと同じくらいの規律と構造です。
Backbone.jsを使用するその他の利点
時々変更する必要があり、リアルタイムで実行される多くのAJAX要求での多くのユーザーインタラクションを含むWebアプリケーション(FacebookやStackOverflowなど)は、Backbone.jsなどのMVCフレームワークを使用する必要があります。これは、優れたコードを作成するための最良の方法です。
ただし、アプリケーションが小さい場合、Backbone.jsは特に初めてのユーザーにとってはやりすぎです。
バックボーンはクライアント側のMVCを提供し、これによって暗示されるすべての利点があります。