SlideShare a Scribd company logo
Backbone.js
MVC in Java Script
MVC 
M Model 
! 
V View 
! 
C Collection 
( not Controller)
MVC 構図(一例) 
Model 
View 
render 
Collection 
Model 
View 
render 
Model 
View 
render 
el el el document
メリット 
• フロントエンドを構造化できる 
• 属性(attributes)の変化にしたがって描画を制 
御できる 
• 各処理を担当する箇所を明確にできる 
• 通信部分、イベント管理、バリデーション、 
描画
How To Write Backbone.js
Depend on … 
UnderScore 
(jQuery) 
(Handlebars) 
<script src="lib/js/jquery-1.9.1.js"></script> 
<script src=“lib/js/underscore.js”></script> 
<script src="lib/handlebars.js"></script> 
<script src="lib/js/backbone.js"></script>
Model 
var App = {}; 
App.Models = {}; 
App.Models.Mymemory = Backbone.Model.extend({ 
// new したときに走る処理 
initialize: function(){ 
// attributesに新しい値がセットされたときのchangeイベントにbind 
this.on(“change”, function(){ alert(“変更しました”); }); 
}, 
// newしたときのattributes初期値 
defaults: { 
watch_name: '', 
clickable: false, 
}, 
// save したときにAjax通信するURL 
url: "/mymemory/watch" 
}); 
! 
var mymemory = new App.Models.Mymemory({watch_name: “みてる”});
View 
var App = {}; 
App.Views = {}; 
App.Views.MymemoryView = Backbone.View.extend({ 
// viewを書き出す位置 
el: “js-mymemory-view”, 
initialize: function(){ 
// 紐付いているmodel のchangeイベントを購読してrender()する 
this.listenTo(this.model, “change”, this.render); 
}, 
render: function(){ 
var json = this.model.attributes; 
var html = App.Views.MymemoryView.template(json); 
this.$el.html(html); 
return this; 
}, 
events: {‘click .js-clickable’ : ‘updateNextWatch’}, 
updateNextWatch: function(){ 
this.model.set({watch_name: “みた”}); 
} 
}, { 
// handlebars を利用したview テンプレート 
template: Handlebars.compile($("#mymemory-template").html()) 
}); 
! 
new App.Views.MymemoryView({model: mymemory}).render();
View template 
<script id="mymemory-template" type="text/x-handlebars- 
template"> 
{{#if clickable}} 
<button class="js-clickable">{{watch_name}}</button> 
{{else}} 
<span>{{watch_name}} 
<a class="js-mymemory-to-quit" href="#">✕</a> 
</span> 
{{/if}} 
</script>
Collection 
var App = {}; 
App.Collections = {}; 
App.Collections.Mymemories= Backbone.Collection.extend({ 
model: App.Models.Mymemory 
}); 
var mymemories = new App.Collections.Mymemories() 
! 
mymemories.add( new App.Models.Mymemory() );
例 
http://animemory.jp/am2492
まとめ 
• 複雑で大規模なフロントエンドで効果的 
• 構造化できる 
• コード量は減らない

More Related Content

What's hot

コンポーネント指向による、Reactのベストプラクティスとバッドプラクティス
コンポーネント指向による、Reactのベストプラクティスとバッドプラクティスコンポーネント指向による、Reactのベストプラクティスとバッドプラクティス
コンポーネント指向による、Reactのベストプラクティスとバッドプラクティス
Kohei Asai
 
Start React with Browserify
Start React with BrowserifyStart React with Browserify
Start React with Browserify
Muyuu Fujita
 
レスポンシブWebデザイン【発展編】
レスポンシブWebデザイン【発展編】レスポンシブWebデザイン【発展編】
レスポンシブWebデザイン【発展編】
Yasuhito Yabe
 
エンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJSエンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJSAyumi Goto
 
AngularJS入門
AngularJS入門AngularJS入門
AngularJS入門
Kenji Shirane
 
Laravel Blade×vue.js 混在させる場合の注意点
Laravel Blade×vue.js 混在させる場合の注意点Laravel Blade×vue.js 混在させる場合の注意点
Laravel Blade×vue.js 混在させる場合の注意点
誠一郎 栗原
 
PhoneGap Introduction
PhoneGap IntroductionPhoneGap Introduction
PhoneGap Introduction
Keisuke Todoroki
 
Flux react現状確認会
Flux react現状確認会Flux react現状確認会
Flux react現状確認会VOYAGE GROUP
 
20160927 reactmeetup
20160927 reactmeetup20160927 reactmeetup
20160927 reactmeetup
Naoki Kurosawa
 
まだDOM操作で消耗してるの?
まだDOM操作で消耗してるの?まだDOM操作で消耗してるの?
まだDOM操作で消耗してるの?
IRI MO
 
Knockout.js を利用したインタラクティブ web アプリケーション開発
Knockout.js を利用したインタラクティブ web アプリケーション開発Knockout.js を利用したインタラクティブ web アプリケーション開発
Knockout.js を利用したインタラクティブ web アプリケーション開発
Daizen Ikehara
 
Grid application テンプレートを紐解く
Grid application テンプレートを紐解くGrid application テンプレートを紐解く
Grid application テンプレートを紐解くKazuhide Maruyama
 
React.jsでクライアントサイドなWebアプリ入門
React.jsでクライアントサイドなWebアプリ入門React.jsでクライアントサイドなWebアプリ入門
React.jsでクライアントサイドなWebアプリ入門
spring_raining
 
今からでも遅くない! React事始め
今からでも遅くない! React事始め今からでも遅くない! React事始め
今からでも遅くない! React事始めynaruta
 
作って分かるKnockoutJS@ALM11月
作って分かるKnockoutJS@ALM11月作って分かるKnockoutJS@ALM11月
作って分かるKnockoutJS@ALM11月
Takuya Ueda
 
Storyboard
StoryboardStoryboard
StoryboardAkura Pi
 
ASP.NET MVCとEntity Frameworkで作ってみた
ASP.NET MVCとEntity Frameworkで作ってみたASP.NET MVCとEntity Frameworkで作ってみた
ASP.NET MVCとEntity Frameworkで作ってみた
Kentaro Inomata
 
Mvcのすすめ
MvcのすすめMvcのすすめ
MvcのすすめAkura Pi
 
AngularJSについて
AngularJSについてAngularJSについて
AngularJSについて
昌生 高橋
 
Angular.jsについてちょっとしゃべる
Angular.jsについてちょっとしゃべるAngular.jsについてちょっとしゃべる
Angular.jsについてちょっとしゃべる
Masashi Haga
 

What's hot (20)

コンポーネント指向による、Reactのベストプラクティスとバッドプラクティス
コンポーネント指向による、Reactのベストプラクティスとバッドプラクティスコンポーネント指向による、Reactのベストプラクティスとバッドプラクティス
コンポーネント指向による、Reactのベストプラクティスとバッドプラクティス
 
Start React with Browserify
Start React with BrowserifyStart React with Browserify
Start React with Browserify
 
レスポンシブWebデザイン【発展編】
レスポンシブWebデザイン【発展編】レスポンシブWebデザイン【発展編】
レスポンシブWebデザイン【発展編】
 
エンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJSエンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJS
 
AngularJS入門
AngularJS入門AngularJS入門
AngularJS入門
 
Laravel Blade×vue.js 混在させる場合の注意点
Laravel Blade×vue.js 混在させる場合の注意点Laravel Blade×vue.js 混在させる場合の注意点
Laravel Blade×vue.js 混在させる場合の注意点
 
PhoneGap Introduction
PhoneGap IntroductionPhoneGap Introduction
PhoneGap Introduction
 
Flux react現状確認会
Flux react現状確認会Flux react現状確認会
Flux react現状確認会
 
20160927 reactmeetup
20160927 reactmeetup20160927 reactmeetup
20160927 reactmeetup
 
まだDOM操作で消耗してるの?
まだDOM操作で消耗してるの?まだDOM操作で消耗してるの?
まだDOM操作で消耗してるの?
 
Knockout.js を利用したインタラクティブ web アプリケーション開発
Knockout.js を利用したインタラクティブ web アプリケーション開発Knockout.js を利用したインタラクティブ web アプリケーション開発
Knockout.js を利用したインタラクティブ web アプリケーション開発
 
Grid application テンプレートを紐解く
Grid application テンプレートを紐解くGrid application テンプレートを紐解く
Grid application テンプレートを紐解く
 
React.jsでクライアントサイドなWebアプリ入門
React.jsでクライアントサイドなWebアプリ入門React.jsでクライアントサイドなWebアプリ入門
React.jsでクライアントサイドなWebアプリ入門
 
今からでも遅くない! React事始め
今からでも遅くない! React事始め今からでも遅くない! React事始め
今からでも遅くない! React事始め
 
作って分かるKnockoutJS@ALM11月
作って分かるKnockoutJS@ALM11月作って分かるKnockoutJS@ALM11月
作って分かるKnockoutJS@ALM11月
 
Storyboard
StoryboardStoryboard
Storyboard
 
ASP.NET MVCとEntity Frameworkで作ってみた
ASP.NET MVCとEntity Frameworkで作ってみたASP.NET MVCとEntity Frameworkで作ってみた
ASP.NET MVCとEntity Frameworkで作ってみた
 
Mvcのすすめ
MvcのすすめMvcのすすめ
Mvcのすすめ
 
AngularJSについて
AngularJSについてAngularJSについて
AngularJSについて
 
Angular.jsについてちょっとしゃべる
Angular.jsについてちょっとしゃべるAngular.jsについてちょっとしゃべる
Angular.jsについてちょっとしゃべる
 

Similar to Study Intro Backbone

はじめよう Backbone.js
はじめよう Backbone.jsはじめよう Backbone.js
はじめよう Backbone.js
Hiroki Toyokawa
 
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話Akira Inoue
 
jQuery/Html5/ASP.NET MVC 対応コンポーネントを用いたデバイス対応業務アプリケーション開発
jQuery/Html5/ASP.NET MVC 対応コンポーネントを用いたデバイス対応業務アプリケーション開発jQuery/Html5/ASP.NET MVC 対応コンポーネントを用いたデバイス対応業務アプリケーション開発
jQuery/Html5/ASP.NET MVC 対応コンポーネントを用いたデバイス対応業務アプリケーション開発
Daizen Ikehara
 
Backbone.js入門
Backbone.js入門Backbone.js入門
Backbone.js入門
AdvancedTechNight
 
第4回REST勉強会 RequireJS編
第4回REST勉強会 RequireJS編第4回REST勉強会 RequireJS編
第4回REST勉強会 RequireJS編
ksimoji
 
Om Next ~React.jsを超えて
Om Next ~React.jsを超えてOm Next ~React.jsを超えて
Om Next ~React.jsを超えて
Kazuki Tsutsumi
 
Visualforce + jQuery
Visualforce + jQueryVisualforce + jQuery
Visualforce + jQuery
Salesforce Developers Japan
 
多分モダンなWebアプリ開発
多分モダンなWebアプリ開発多分モダンなWebアプリ開発
多分モダンなWebアプリ開発
tak-nakamura
 
Isomorphic web development with scala and scala.js
Isomorphic web development  with scala and scala.jsIsomorphic web development  with scala and scala.js
Isomorphic web development with scala and scala.js
TanUkkii
 
さわってみようReact.js、AngularJS(1系、2系)
さわってみようReact.js、AngularJS(1系、2系)さわってみようReact.js、AngularJS(1系、2系)
さわってみようReact.js、AngularJS(1系、2系)
Kazuhiro Yoshimoto
 
jQuery と MVC で実践する標準志向 Web 開発
jQuery と MVC で実践する標準志向 Web 開発jQuery と MVC で実践する標準志向 Web 開発
jQuery と MVC で実践する標準志向 Web 開発
Akira Inoue
 
[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介
[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介
[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介david9142
 
ASP.NET MVC と jQuery で実践する標準志向 Web 開発
ASP.NET MVC と jQuery で実践する標準志向 Web 開発ASP.NET MVC と jQuery で実践する標準志向 Web 開発
ASP.NET MVC と jQuery で実践する標準志向 Web 開発
Akira Inoue
 
Java fx勉強会lt 第8回
Java fx勉強会lt 第8回Java fx勉強会lt 第8回
Java fx勉強会lt 第8回Taiji Miyabe
 
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
 
serverless
serverlessserverless
serverless
Akira Otsuka
 
scala+liftで遊ぼう
scala+liftで遊ぼうscala+liftで遊ぼう
scala+liftで遊ぼう
youku
 
JavaFX 2.0 - リッチクライアントのためのUI基盤
JavaFX 2.0 - リッチクライアントのためのUI基盤JavaFX 2.0 - リッチクライアントのためのUI基盤
JavaFX 2.0 - リッチクライアントのためのUI基盤Yuichi Sakuraba
 
【17-C-2】 クラウド上でのエンタープライズアプリケーション開発
【17-C-2】 クラウド上でのエンタープライズアプリケーション開発【17-C-2】 クラウド上でのエンタープライズアプリケーション開発
【17-C-2】 クラウド上でのエンタープライズアプリケーション開発
lalha
 

Similar to Study Intro Backbone (20)

はじめよう Backbone.js
はじめよう Backbone.jsはじめよう Backbone.js
はじめよう Backbone.js
 
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
 
jQuery/Html5/ASP.NET MVC 対応コンポーネントを用いたデバイス対応業務アプリケーション開発
jQuery/Html5/ASP.NET MVC 対応コンポーネントを用いたデバイス対応業務アプリケーション開発jQuery/Html5/ASP.NET MVC 対応コンポーネントを用いたデバイス対応業務アプリケーション開発
jQuery/Html5/ASP.NET MVC 対応コンポーネントを用いたデバイス対応業務アプリケーション開発
 
SpringMVC
SpringMVCSpringMVC
SpringMVC
 
Backbone.js入門
Backbone.js入門Backbone.js入門
Backbone.js入門
 
第4回REST勉強会 RequireJS編
第4回REST勉強会 RequireJS編第4回REST勉強会 RequireJS編
第4回REST勉強会 RequireJS編
 
Om Next ~React.jsを超えて
Om Next ~React.jsを超えてOm Next ~React.jsを超えて
Om Next ~React.jsを超えて
 
Visualforce + jQuery
Visualforce + jQueryVisualforce + jQuery
Visualforce + jQuery
 
多分モダンなWebアプリ開発
多分モダンなWebアプリ開発多分モダンなWebアプリ開発
多分モダンなWebアプリ開発
 
Isomorphic web development with scala and scala.js
Isomorphic web development  with scala and scala.jsIsomorphic web development  with scala and scala.js
Isomorphic web development with scala and scala.js
 
さわってみようReact.js、AngularJS(1系、2系)
さわってみようReact.js、AngularJS(1系、2系)さわってみようReact.js、AngularJS(1系、2系)
さわってみようReact.js、AngularJS(1系、2系)
 
jQuery と MVC で実践する標準志向 Web 開発
jQuery と MVC で実践する標準志向 Web 開発jQuery と MVC で実践する標準志向 Web 開発
jQuery と MVC で実践する標準志向 Web 開発
 
[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介
[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介
[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介
 
ASP.NET MVC と jQuery で実践する標準志向 Web 開発
ASP.NET MVC と jQuery で実践する標準志向 Web 開発ASP.NET MVC と jQuery で実践する標準志向 Web 開発
ASP.NET MVC と jQuery で実践する標準志向 Web 開発
 
Java fx勉強会lt 第8回
Java fx勉強会lt 第8回Java fx勉強会lt 第8回
Java fx勉強会lt 第8回
 
From Swing to JavaFX - SwingからJavaFXへのマイグレーションガイド
From Swing to JavaFX  - SwingからJavaFXへのマイグレーションガイドFrom Swing to JavaFX  - SwingからJavaFXへのマイグレーションガイド
From Swing to JavaFX - SwingからJavaFXへのマイグレーションガイド
 
serverless
serverlessserverless
serverless
 
scala+liftで遊ぼう
scala+liftで遊ぼうscala+liftで遊ぼう
scala+liftで遊ぼう
 
JavaFX 2.0 - リッチクライアントのためのUI基盤
JavaFX 2.0 - リッチクライアントのためのUI基盤JavaFX 2.0 - リッチクライアントのためのUI基盤
JavaFX 2.0 - リッチクライアントのためのUI基盤
 
【17-C-2】 クラウド上でのエンタープライズアプリケーション開発
【17-C-2】 クラウド上でのエンタープライズアプリケーション開発【17-C-2】 クラウド上でのエンタープライズアプリケーション開発
【17-C-2】 クラウド上でのエンタープライズアプリケーション開発
 

Study Intro Backbone

  • 2. MVC in Java Script
  • 3. MVC M Model ! V View ! C Collection ( not Controller)
  • 4. MVC 構図(一例) Model View render Collection Model View render Model View render el el el document
  • 5. メリット • フロントエンドを構造化できる • 属性(attributes)の変化にしたがって描画を制 御できる • 各処理を担当する箇所を明確にできる • 通信部分、イベント管理、バリデーション、 描画
  • 6. How To Write Backbone.js
  • 7. Depend on … UnderScore (jQuery) (Handlebars) <script src="lib/js/jquery-1.9.1.js"></script> <script src=“lib/js/underscore.js”></script> <script src="lib/handlebars.js"></script> <script src="lib/js/backbone.js"></script>
  • 8. Model var App = {}; App.Models = {}; App.Models.Mymemory = Backbone.Model.extend({ // new したときに走る処理 initialize: function(){ // attributesに新しい値がセットされたときのchangeイベントにbind this.on(“change”, function(){ alert(“変更しました”); }); }, // newしたときのattributes初期値 defaults: { watch_name: '', clickable: false, }, // save したときにAjax通信するURL url: "/mymemory/watch" }); ! var mymemory = new App.Models.Mymemory({watch_name: “みてる”});
  • 9. View var App = {}; App.Views = {}; App.Views.MymemoryView = Backbone.View.extend({ // viewを書き出す位置 el: “js-mymemory-view”, initialize: function(){ // 紐付いているmodel のchangeイベントを購読してrender()する this.listenTo(this.model, “change”, this.render); }, render: function(){ var json = this.model.attributes; var html = App.Views.MymemoryView.template(json); this.$el.html(html); return this; }, events: {‘click .js-clickable’ : ‘updateNextWatch’}, updateNextWatch: function(){ this.model.set({watch_name: “みた”}); } }, { // handlebars を利用したview テンプレート template: Handlebars.compile($("#mymemory-template").html()) }); ! new App.Views.MymemoryView({model: mymemory}).render();
  • 10. View template <script id="mymemory-template" type="text/x-handlebars- template"> {{#if clickable}} <button class="js-clickable">{{watch_name}}</button> {{else}} <span>{{watch_name}} <a class="js-mymemory-to-quit" href="#">✕</a> </span> {{/if}} </script>
  • 11. Collection var App = {}; App.Collections = {}; App.Collections.Mymemories= Backbone.Collection.extend({ model: App.Models.Mymemory }); var mymemories = new App.Collections.Mymemories() ! mymemories.add( new App.Models.Mymemory() );
  • 13. まとめ • 複雑で大規模なフロントエンドで効果的 • 構造化できる • コード量は減らない