冒頭の文は、実際にはBackbone.jsとjQueryの違いを非常によく表しています。それでは、少し解凍してみましょう。
一つには、2つのライブラリはまったく競合していません-それらは無料です。
例として、jQueryで行ういくつかのことを次に示します。
- アニメーションのスライドショー
- iOSスタイルの数値「スピナー」などのフォームコントロールの機能強化
- クラス名に基づいて要素の可視性を切り替える
そして、Backbone.jsで行う可能性のあるいくつかのこと:
- フォトアルバムを作成します。ユーザーがサムネイルをクリックすると、使用したカメラ、場所、写真家の名前などのデータとともに、写真の拡大版を表示できます。
- データのグリッドを表示し、ユーザーが個々の要素をクリックしてフォームで更新できるようにするマスター/詳細タイプのページを作成します。
jQueryはミクロレベルで優れています。ページ要素を選択し、ブラウザーがイベントを処理する方法の違いを滑らかにします。
Backbone.jsはより全体像です。データとアプリケーションロジックの管理に役立ちます。上記のフォトアルバムの例では、Backboneはいくつかの便利な構造を提供します。写真に関連するすべてのデータ(モデル)、アルバム内のすべての写真のリスト(コレクション)、およびどこかに置く場所があります。ユーザーがサムネイル(ビュー)をクリックしたときに何が起こるかを決定するロジック。これらは、バックボーンコントロールまたはアプリケーションの主要部分です。
ただし、Backbone.jsは、アプリケーションのデータとロジックの結果をDOMにレンダリングするのに役立つ、jQueryまたはそのようなものの恩恵を受けています。たとえば、jQueryを使用して、Backboneアプリのコンテナとして機能するページ上の要素を選択するのが一般的です。また、jQueryを使用し$(function () {});
てバックボーンコントロールの一部を起動することも一般的です。おそらく、jQueryでもフォームフィールド検証エラーメッセージを表示するでしょう。
確かに、jQueryで大きくて複雑なユーザーインターフェイスを構築できます。私が仕事で維持しているアプリにはいくつかあります。ただし、jQueryはアプリケーションに構造を提供するように設計されていないため、操作が困難です。特に、アイテムのグループを選択し、それらのアイテムを操作するコールバック関数を渡すことに基づいているjQueryのAPIは、大規模で複雑なコントロールやアプリで使用するのに適したパターンではありません。ネストされた関数がたくさんあることになり、何が起こっているのかを確認するのは非常に困難です。
私は現在、Backbone.jsでそれらのコントロールの1つを作り直しています。最後の例として、両方の異なるライブラリで同じコントロールを操作するときに、私の思考プロセスがどのように異なるかを簡単にまとめます。
jQueryでは、次のことが心配です。
- 正しいセレクターを使用して、
li
必要な要素のグループを取得していますか?
- このAjax呼び出しが完了したときに、その値のリストを再入力する必要がありますか?
- これらの配列値を
input
ページの要素に戻すにはどうすればよいですか?
バックボーンでは、私はより焦点を当てています:
- モデルアイテムのこのプロパティセットを検証するための正しいロジックは何ですか?
- ユーザーが[追加]ボタンをクリックしたときに、コレクションに新しいアイテムをすぐに追加する必要がありますか、それともすべてのデータが入力されて「有効」になるまで待つ必要がありますか?
- コレクション内のアイテムは、削除の直前または直後にどのように応答する必要がありますか?
jQueryは本質的な詳細を処理し、Backboneはより高レベルです。
最後に、Backbone.jsの例について説明するときに、「control」と「app」という単語を使用していることに注意してください。Backbone.jsがシングルページアプリ専用であるというのは真実ではありません。ただし、Backbone.jsは、データを操作して多くのロジックを処理する複雑なアプリケーションを構築するのに適していることは事実です。小規模なUI要素に使用するのはばかげています-それが課す余分な構造は必要ありません。
更新:複数のページの問題については、はい、Backboneはデータを永続化するための強力なメカニズムを提供します。各モデルにはsave
、AJAX呼び出しを実行してサーバーに変更を保存するメソッドがあります。データを保存しながら保存する限り、複数ページのアプリを使用できます。これは非常に柔軟なモデルであり、おそらく仕事でBackboneを使用することになります。シングルページアプリを作成したいのですが、既存のマルチページアプリケーションで10年の作業があります。バックボーンでより強力なUIコンポーネントのいくつかを再構築し、ユーザーが別のページに移動する前に変更をサーバーに同期することを検討しています。