Backbone.jsを始めてみる

2013-02-22T00:00:00+00:00 Backbone.js JavaScript

タイトル通り、以前から勉強しようと思ってたBackbone.jsを始めてみる事に。でこれどう説明すれば良いのかが微妙だけど、「RESTful WebアプリケーションのためのJSサイドのMVCフレームワーク」的な感じかなと。一応色々機能があって(ry

とにかく、 http://backbonejs.org を読みつつ進めてみる

概要

ボタンを押すとサーバーから配信されるJSONレスポンスがViewにバインドされるような感じな物を作る。概要としてBackbone.View、Backbone.Model、Backbone.Collectionを使ってサーバーから配信されるJSONレスポンスを元にUIを構築

な感じかなーっと

Backbone.js動作環境の構築

Backbone.jsはjQueryとunderscore.jsが必要なのでそれも取ってくる。必要なバージョンに関しては公式ドキュメント(っていうかサイト)に書いてるのでそれに伴うバージョンを利用する事

index.html

<html>
  <head>
    <link rel="stylesheet" type="text/css" href="bootstrap.min.css" />
    <script type="text/javascript" src="js/jquery.js"></script>
    <script type="text/javascript" src="js/underscore.js"></script>
    <script type="text/javascript" src="js/backbone.js"></script>
  </head>
  <body>
    <button id="btn" style="padding: 10px">click</button>
    <div id="content"></div>
    <script type="text/javascript" src="index.js"></script>
  </body>
</html>

index.js

var App = {
  "Models": {},
  "Collections": {},
  "Views": {}
};

// Backbone.Model
App.Models.Sample = Backbone.Model.extend({});

// Bacakbone.Collection
App.Collections.Sample = Backbone.Collection.extend({
  "model": App.Models.Sample, // Backbone.Collectionが参照するBackbone.Model
  "url": "http://localhost:5000/fetch/samples" // fetchで使用するURL。/からの指定でもオッケーらしい (ドキュメントによると)
});

// Backbone.View (SampleView)
App.Views.SampleView = Backbone.View.extend({
  "el": $("#content"),
  "render": function() {
    var el = this.$el;

    var col = new App.Collections.Sample();
    col.fetch({
      "success": function(collection, models) {
        models.forEach(
          function(model) {
            // ここのmodel変数はBackbone.Modelでは無い (ただのObject)
            el.append($("<h2>").text(model.name));
          }
        );
      }
    });
  }
});

// Backbone.View (ButtonView)
App.Views.ButtonView = Backbone.View.extend({
  "el": $("#btn"),
  "initialize": function() {
    // 初期化時に指定されているエレメントに動的にクラスを割り当て設定を行う
    // 別に必要ないけど、Backbone.Viewスコープでそういうのをやる場合どうするのかっていう所な疑問が出たので(ry
    this.$el.addClass("btn btn-large btn-primary");
  },
  "events": {
    // クリックイベント
    "click": function() {
      new App.Views.SampleView().render();

      this.remove();
    }
  }
});

new App.Views.ButtonView();

流れ的には

  • App.Views.ButtonViewで<button>とBackbone.Viewを組み込む
  • ボタンクリック時にApp.Views.SampleViewのrenderメソッド?を実行。でその後、ButtonViewなのをremove
  • SampleView.renderでBackbone.CollectionなApp.Collections.Sampleをfetchしてその結果をビューへバインド

PHP_CodeCoverageを使ってPHPコードのカバレッジを出力する方法