SlideShare uma empresa Scribd logo
1 de 27
Baixar para ler offline
Backbone.js
supply structure to web applications
自己紹介
● 清水 大輔(しみず だいすけ)
● NHN Japan
  LINEのJS書いてます
● 著書『iPhone & Android HTML5ではじめるアプ
  リ制作の手引き 』
● 趣味:フットサル、ジョギング
● twitter id @tori3_jp
backbone.jsとは
● 開発者はJeremy Ashkenas氏
  CoffeeScript, underscore.js

● JavaScript MVC Framework
  Events, Model, Collection, View, Route

● Document

● 採用事例
  LinkedIn, foursquare, pandora, etc...
他にも
● Knockout.js (MVVM)

● Javascript MVC

● Ember.js

● Spine.js

● Angular.js
MVCとは
"Model View Controller(モデル・ビュー・コントローラ; MVC)
は、コンピュータ内部のデータをユーザに提示し、それに対して
ユーザが何らかの指示を出すタイプの、独自のユーザーインタ
フェースをもつアプリケーションソフトウェアを、以下に述べるよ
うなmodel・view・controllerの3つの部分に分割して設計・実装
するという技法、又はそのような構造をいう。
各モジュールが比較的截然と分かれ、プログラムの見通しがよ
くなるとともに、ユーザインタフェース (UI) 部分を別のモジュー
ルに取り替えることが容易となるのが利点である。自動プログラ
ミングなどにも適している。"
                         出典:wikipedia
・HTML5、ブラウザの高速化などに伴って
   Webアプリでよりネイティブアプリ近いUXが可能に

  => JavaScriptで複数のViewを切り替えるようなアプリ
 => 保守性、品質を保つには高いスキルやコストが必要
  => OOPのデザインパターンの利用
  => JavaScript MVC Framework
注意

● なんでもかんでもMVCが必要というわけではない
 etc: 単純なTab UIの実装、ちょっとしたeffect処理

● backbone.jsを使った = MVCではない

● MVC is dead なんて話題になりましたが...
 プレゼンテーションとドメインの分離が重要
Backbone.jsでのMVC
MVCだが....
Backbone.Model => Model
Backbone.Collection => Group化したModel
Backbone.Router => Controllerの一部とURLとのMapping
Backbone.View => ViewとController (Modelを内包)
Template => View
Dependency
● jQuery or Zepto

● Underscore.js

● ( json2.js)
Events
Backbone.View, Mdoel, Collectionは
全てこのBackbone.Eventsを継承

on(), off(), trigger()のメソッドを実装

=> Observe Pattern
Model
====================================
var model = Backbone.Model.extend({
    update: function(value) {
        ・・・
        // "change" eventをtirgger
        this.trigger("change");
      }
});

View
====================================
var view = Backbone.View.extend({
    initialize: function() {
          // modelのeventにattach
          this.model.on("change", this.onChange, this);
    },
    onChange: function(arg) {
          ・・・
    }
});
Model
ドメイン(ビジネスロジック)の実装
データ同期に透過的なRESTFul APIを提供
(Backbone.Sync)

save() => POST or PUT
destroy() => DELETE
fetch() => GET
var Book= Backbone.Model.extend({
    // リソースURL
      url: function() {
           return "http://hoge/api" + ((this.id) ? "/" + this.id : "");
      },

      // デフォルトプロパティを設定
      defaults: {
          title: "",
          author: "",
          isbn: "",
          price: 0
      }

      // コンストラクタ
      initialize: function() {
           ・・・
      }
});
var book = new Book({
     title : "JavaScript MVC",
     author: "hoge hoge",
     price : 3000
});

// POST
book.save();

=> POST : http://hoge/api

// PUT ( idに1111が設定されているとする)
book.set({price : 1000});
book.save();
=> PUT : http://hoge.hoge/api/1111

//DELETE
book.destroy()
=> DELETE : http://hogehoge/api/1111
メソッドのオーバーライド。スーパークラスのメソッド呼び出し

var book = new Backbone.Model({
    set : function(obj) {
         obj.price = obj.price * 0.05;
         Backbone.Model.prototype.set.call(this, obj);
    }
});
Backbone.Syncをオーバーライドすることで、他のリソース(localStorageなど)を使えま
す

Backbone.sync = function(method, model, options) {

 var resp;
 var store = model.localStorage || model.collection.localStorage;

 switch (method) {
   case "read": resp = model.id ? store.find(model) : store.findAll(); break;
   case "create": resp = store.create(model);                  break;
   case "update": resp = store.update(model);                    break;
   case "delete": resp = store.destroy(model);                  break;
 }
Collection
ModelをGroup(LIST)化したもの

underscore.jsのメソッドに大部分が依存
● each
● sort
● shuffle
● reset
● filter
var BookCollection = new Backbone.Collection.extend({

      // collectionするmodel
      model: Book,

      // コンストラクタ
      initialize: function() {
      },

      // comparator
      comparator: function(book) {
           return book.get("price");
      }
});
var bookList = new BookCollection([
    {title : "aaaa", author: "hoge1", price: 1000},
    {title : "bbb", author: "hoge2", price: 2000},
    {title : "ccccc", author: "hoge3", price: 3000}
]);

// push
bookList.push(new Book({title : "dddd", author: "hoge4", price: 600});

// pop
var book1 = bookList.pop();

// sort ( price 昇順にソート)
bookList.sort();

// indexを指定して取得
var book2 = bookList.at(1);
View
プレゼンテーション部分の実装
● templateを使ったDOM作成
● DOM操作
● delegateでのDOM Event処理
● model (collection)のcontrol
var BookView = Backbone.View.extend({

    tagName: "li",

    // delegate event
    events: {
         "click .removeBtn" : "onRemove"
    },

    // テンプレート
    tmpl : $("#bookTmpl"),

    // コンストラクタ
    initialize: function() {
          this.model.bind("destory", this.change, this);
    },

    // レンダリング
    render : function() {
        this.$el.html(_.tmplate(this.tmpl.text(), this.model.toJSON());
        return this.$el;
    },
// 削除ボタンclick
      onRemove: function(e) {
          this.model.destory();
      },

      // destory
      remove: function() {
           this.$el.remove();
      }
});

===========================================
var bookModel = new Bookl({
     title: "javascript mvc",
     price: 2000
});

var bookView = new BookView({
     model : bookModel
});
bookView.render();
History / Router
History
pushStateに対応
location.hashへ自動でフェイルオーバー
Router
URL (location.hash)に基づいた処理のルーティング
var BookShelfRouter = Backbone.Router.extend({

      routes: {
          "home":      "home",
          "search/:query": "search"
      },
      home: function() {
          ・・・
      },
      search: function(query) {
          ・・・
      }
});

var router = new BookShelfRouter();
Backbone.history.start({pushState: true, root: "/home"})

============================
http://hoge/seach/mvc
良いところ
・LinghtWeight
  1431行(v.0.9.2)、 pack & gzipで5.6KB
 最小構成(zepto + underscore)で
  5.6KB + 4KB + 8.4KB = 18KB

・RESTFul JSON

・Routing & History Control
今後
● backbone conf 2012 (5/30-31)

● リアクティブプログラミング
  backbone.io
  node.js + socket.ioでserver sideのmodelと
 リアルタイムに連携

Mais conteúdo relacionado

Mais procurados

⑲jQueryをおぼえよう!その5
⑲jQueryをおぼえよう!その5⑲jQueryをおぼえよう!その5
⑲jQueryをおぼえよう!その5Nishida Kansuke
 
JavaScriptことはじめ
JavaScriptことはじめJavaScriptことはじめ
JavaScriptことはじめYuki Ishikawa
 
Pro aspnetmvc3framework chap19
Pro aspnetmvc3framework chap19Pro aspnetmvc3framework chap19
Pro aspnetmvc3framework chap19Hideki Hashizume
 
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
JavaScriptCore.framework の普通な使い方 #cocoa_kansaiJavaScriptCore.framework の普通な使い方 #cocoa_kansai
JavaScriptCore.framework の普通な使い方 #cocoa_kansaiTomohiro Kumagai
 
20110714 j queryベーシック
20110714 j queryベーシック20110714 j queryベーシック
20110714 j queryベーシック良太 増子
 
Androidで使えるJSON-Javaライブラリ
Androidで使えるJSON-JavaライブラリAndroidで使えるJSON-Javaライブラリ
Androidで使えるJSON-JavaライブラリYukiya Nakagawa
 
ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用Yatabe Terumasa
 
ScaLa+Liftとか
ScaLa+LiftとかScaLa+Liftとか
ScaLa+Liftとかyouku
 
Grails-1.1を斬る!~Grails-1.1からのチーム開発~ in Tokyo
Grails-1.1を斬る!~Grails-1.1からのチーム開発~ in TokyoGrails-1.1を斬る!~Grails-1.1からのチーム開発~ in Tokyo
Grails-1.1を斬る!~Grails-1.1からのチーム開発~ in TokyoTsuyoshi Yamamoto
 
モテる JavaScript
モテる JavaScriptモテる JavaScript
モテる JavaScriptOsamu Monoe
 
ノンプログラマーでも明日から使えるJavaScript簡単プログラム 先生:柳井 政和
ノンプログラマーでも明日から使えるJavaScript簡単プログラム 先生:柳井 政和ノンプログラマーでも明日から使えるJavaScript簡単プログラム 先生:柳井 政和
ノンプログラマーでも明日から使えるJavaScript簡単プログラム 先生:柳井 政和schoowebcampus
 
探検!SwiftyJSON
探検!SwiftyJSON探検!SwiftyJSON
探検!SwiftyJSONYuka Ezura
 
これからのJavaScriptの話
これからのJavaScriptの話これからのJavaScriptの話
これからのJavaScriptの話Shogo Sensui
 
What is doobie? - database access for scala -
What is doobie? - database access for scala -What is doobie? - database access for scala -
What is doobie? - database access for scala -chibochibo
 

Mais procurados (19)

⑲jQueryをおぼえよう!その5
⑲jQueryをおぼえよう!その5⑲jQueryをおぼえよう!その5
⑲jQueryをおぼえよう!その5
 
JavaScriptことはじめ
JavaScriptことはじめJavaScriptことはじめ
JavaScriptことはじめ
 
Pro aspnetmvc3framework chap19
Pro aspnetmvc3framework chap19Pro aspnetmvc3framework chap19
Pro aspnetmvc3framework chap19
 
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
JavaScriptCore.framework の普通な使い方 #cocoa_kansaiJavaScriptCore.framework の普通な使い方 #cocoa_kansai
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
 
20110714 j queryベーシック
20110714 j queryベーシック20110714 j queryベーシック
20110714 j queryベーシック
 
Androidで使えるJSON-Javaライブラリ
Androidで使えるJSON-JavaライブラリAndroidで使えるJSON-Javaライブラリ
Androidで使えるJSON-Javaライブラリ
 
ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用
 
ScaLa+Liftとか
ScaLa+LiftとかScaLa+Liftとか
ScaLa+Liftとか
 
Grails-1.1を斬る!~Grails-1.1からのチーム開発~ in Tokyo
Grails-1.1を斬る!~Grails-1.1からのチーム開発~ in TokyoGrails-1.1を斬る!~Grails-1.1からのチーム開発~ in Tokyo
Grails-1.1を斬る!~Grails-1.1からのチーム開発~ in Tokyo
 
swooleを試してみた
swooleを試してみたswooleを試してみた
swooleを試してみた
 
モテる JavaScript
モテる JavaScriptモテる JavaScript
モテる JavaScript
 
OSC京都2011
OSC京都2011OSC京都2011
OSC京都2011
 
ノンプログラマーでも明日から使えるJavaScript簡単プログラム 先生:柳井 政和
ノンプログラマーでも明日から使えるJavaScript簡単プログラム 先生:柳井 政和ノンプログラマーでも明日から使えるJavaScript簡単プログラム 先生:柳井 政和
ノンプログラマーでも明日から使えるJavaScript簡単プログラム 先生:柳井 政和
 
Blocksの活用法
Blocksの活用法Blocksの活用法
Blocksの活用法
 
探検!SwiftyJSON
探検!SwiftyJSON探検!SwiftyJSON
探検!SwiftyJSON
 
これからのJavaScriptの話
これからのJavaScriptの話これからのJavaScriptの話
これからのJavaScriptの話
 
Swiftyを試す
Swiftyを試すSwiftyを試す
Swiftyを試す
 
いまさらJavaScript
いまさらJavaScriptいまさらJavaScript
いまさらJavaScript
 
What is doobie? - database access for scala -
What is doobie? - database access for scala -What is doobie? - database access for scala -
What is doobie? - database access for scala -
 

Destaque (20)

Simo Ahava - Tag Management Solutions – Best. Data. Ever. MKTFEST 2014
Simo Ahava - Tag Management Solutions – Best. Data. Ever. MKTFEST 2014Simo Ahava - Tag Management Solutions – Best. Data. Ever. MKTFEST 2014
Simo Ahava - Tag Management Solutions – Best. Data. Ever. MKTFEST 2014
 
Workshop
WorkshopWorkshop
Workshop
 
Sap fiori
Sap fioriSap fiori
Sap fiori
 
Management Consulting
Management ConsultingManagement Consulting
Management Consulting
 
Elon Musk
Elon MuskElon Musk
Elon Musk
 
Chess
ChessChess
Chess
 
French Property Market 2014
French Property Market 2014French Property Market 2014
French Property Market 2014
 
intel core i7
intel core i7intel core i7
intel core i7
 
Medical devices
Medical devicesMedical devices
Medical devices
 
French Property market 2015 - Cushman & Wakefield
French Property market 2015 - Cushman & WakefieldFrench Property market 2015 - Cushman & Wakefield
French Property market 2015 - Cushman & Wakefield
 
Bill Gates, Who is he?
Bill Gates, Who is he?Bill Gates, Who is he?
Bill Gates, Who is he?
 
In memory computing
In memory computingIn memory computing
In memory computing
 
Reverse Engineering
Reverse EngineeringReverse Engineering
Reverse Engineering
 
Growth Hacking
Growth Hacking Growth Hacking
Growth Hacking
 
Datomic
DatomicDatomic
Datomic
 
Jim rohn
Jim  rohnJim  rohn
Jim rohn
 
Lionel Messi
Lionel MessiLionel Messi
Lionel Messi
 
Tesco
TescoTesco
Tesco
 
Lionel messi
Lionel messiLionel messi
Lionel messi
 
Selena Gomez
Selena GomezSelena Gomez
Selena Gomez
 

Semelhante a Backbone.js

自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみたYuki Takei
 
「Windows 8 ストア アプリ開発 tips」 hokuriku.net vol.11 (2013年1月26日)
「Windows 8 ストア アプリ開発 tips」  hokuriku.net vol.11 (2013年1月26日)「Windows 8 ストア アプリ開発 tips」  hokuriku.net vol.11 (2013年1月26日)
「Windows 8 ストア アプリ開発 tips」 hokuriku.net vol.11 (2013年1月26日)Fujio Kojima
 
第4回REST勉強会 RequireJS編
第4回REST勉強会 RequireJS編第4回REST勉強会 RequireJS編
第4回REST勉強会 RequireJS編ksimoji
 
速くなければスマフォじゃない - インターンバージョン-
速くなければスマフォじゃない - インターンバージョン-速くなければスマフォじゃない - インターンバージョン-
速くなければスマフォじゃない - インターンバージョン-Kazunari Hara
 
pi-15. カプセル化, MVCモデル, オブジェクトのマッピング
pi-15. カプセル化, MVCモデル, オブジェクトのマッピングpi-15. カプセル化, MVCモデル, オブジェクトのマッピング
pi-15. カプセル化, MVCモデル, オブジェクトのマッピングkunihikokaneko1
 
エンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJSエンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJSAyumi Goto
 
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsugSpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsugY Watanabe
 
ASP.NET MVC のルーティング設定を少しだけ REST ぽくする
ASP.NET MVC のルーティング設定を少しだけ REST ぽくするASP.NET MVC のルーティング設定を少しだけ REST ぽくする
ASP.NET MVC のルーティング設定を少しだけ REST ぽくするdany1468
 
イマドキの現場で使えるJavaライブラリ事情
イマドキの現場で使えるJavaライブラリ事情イマドキの現場で使えるJavaライブラリ事情
イマドキの現場で使えるJavaライブラリ事情takezoe
 
From Swing to JavaFX - SwingからJavaFXへのマイグレーションガイド
From Swing to JavaFX  - SwingからJavaFXへのマイグレーションガイドFrom Swing to JavaFX  - SwingからJavaFXへのマイグレーションガイド
From Swing to JavaFX - SwingからJavaFXへのマイグレーションガイドYuichi Sakuraba
 
traitを使って楽したい話
traitを使って楽したい話traitを使って楽したい話
traitを使って楽したい話infinite_loop
 
Functional JavaScript with Lo-Dash.js
Functional JavaScript with Lo-Dash.jsFunctional JavaScript with Lo-Dash.js
Functional JavaScript with Lo-Dash.jsShogo Sensui
 
はじめよう Backbone.js
はじめよう Backbone.jsはじめよう Backbone.js
はじめよう Backbone.jsHiroki Toyokawa
 
20130924 Picomon CRH勉強会
20130924 Picomon CRH勉強会20130924 Picomon CRH勉強会
20130924 Picomon CRH勉強会Yukihiro Kitazawa
 
Angular js はまりどころ
Angular js はまりどころAngular js はまりどころ
Angular js はまりどころAyumi Goto
 
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~normalian
 

Semelhante a Backbone.js (20)

自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
 
「Windows 8 ストア アプリ開発 tips」 hokuriku.net vol.11 (2013年1月26日)
「Windows 8 ストア アプリ開発 tips」  hokuriku.net vol.11 (2013年1月26日)「Windows 8 ストア アプリ開発 tips」  hokuriku.net vol.11 (2013年1月26日)
「Windows 8 ストア アプリ開発 tips」 hokuriku.net vol.11 (2013年1月26日)
 
Django boodoo
Django boodooDjango boodoo
Django boodoo
 
Scene BuilderでFXML
Scene BuilderでFXMLScene BuilderでFXML
Scene BuilderでFXML
 
第4回REST勉強会 RequireJS編
第4回REST勉強会 RequireJS編第4回REST勉強会 RequireJS編
第4回REST勉強会 RequireJS編
 
速くなければスマフォじゃない - インターンバージョン-
速くなければスマフォじゃない - インターンバージョン-速くなければスマフォじゃない - インターンバージョン-
速くなければスマフォじゃない - インターンバージョン-
 
pi-15. カプセル化, MVCモデル, オブジェクトのマッピング
pi-15. カプセル化, MVCモデル, オブジェクトのマッピングpi-15. カプセル化, MVCモデル, オブジェクトのマッピング
pi-15. カプセル化, MVCモデル, オブジェクトのマッピング
 
エンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJSエンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJS
 
test
testtest
test
 
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsugSpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
 
ASP.NET MVC のルーティング設定を少しだけ REST ぽくする
ASP.NET MVC のルーティング設定を少しだけ REST ぽくするASP.NET MVC のルーティング設定を少しだけ REST ぽくする
ASP.NET MVC のルーティング設定を少しだけ REST ぽくする
 
イマドキの現場で使えるJavaライブラリ事情
イマドキの現場で使えるJavaライブラリ事情イマドキの現場で使えるJavaライブラリ事情
イマドキの現場で使えるJavaライブラリ事情
 
JavaScript入門
JavaScript入門JavaScript入門
JavaScript入門
 
From Swing to JavaFX - SwingからJavaFXへのマイグレーションガイド
From Swing to JavaFX  - SwingからJavaFXへのマイグレーションガイドFrom Swing to JavaFX  - SwingからJavaFXへのマイグレーションガイド
From Swing to JavaFX - SwingからJavaFXへのマイグレーションガイド
 
traitを使って楽したい話
traitを使って楽したい話traitを使って楽したい話
traitを使って楽したい話
 
Functional JavaScript with Lo-Dash.js
Functional JavaScript with Lo-Dash.jsFunctional JavaScript with Lo-Dash.js
Functional JavaScript with Lo-Dash.js
 
はじめよう Backbone.js
はじめよう Backbone.jsはじめよう Backbone.js
はじめよう Backbone.js
 
20130924 Picomon CRH勉強会
20130924 Picomon CRH勉強会20130924 Picomon CRH勉強会
20130924 Picomon CRH勉強会
 
Angular js はまりどころ
Angular js はまりどころAngular js はまりどころ
Angular js はまりどころ
 
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~
 

Backbone.js