SlideShare ist ein Scribd-Unternehmen logo
1 von 13
Downloaden Sie, um offline zu lesen
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
まとめ 
• 複雑で大規模なフロントエンドで効果的 
• 構造化できる 
• コード量は減らない

Weitere ähnliche Inhalte

Was ist angesagt?

エンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJSエンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJS
Ayumi Goto
 
Flux react現状確認会
Flux react現状確認会Flux react現状確認会
Flux react現状確認会
VOYAGE GROUP
 
Grid application テンプレートを紐解く
Grid application テンプレートを紐解くGrid application テンプレートを紐解く
Grid application テンプレートを紐解く
Kazuhide Maruyama
 
今からでも遅くない! React事始め
今からでも遅くない! React事始め今からでも遅くない! React事始め
今からでも遅くない! React事始め
ynaruta
 
Storyboard
StoryboardStoryboard
Storyboard
Akura Pi
 
Mvcのすすめ
MvcのすすめMvcのすすめ
Mvcのすすめ
Akura Pi
 

Was ist angesagt? (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についてちょっとしゃべる
 

Ähnlich wie Study Intro Backbone

Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
Featuring Project Silk & Liike: 楽しい "モダン" 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
 
Java fx勉強会lt 第8回
Java fx勉強会lt 第8回Java fx勉強会lt 第8回
Java fx勉強会lt 第8回
Taiji Miyabe
 
JavaFX 2.0 - リッチクライアントのためのUI基盤
JavaFX 2.0 - リッチクライアントのためのUI基盤JavaFX 2.0 - リッチクライアントのためのUI基盤
JavaFX 2.0 - リッチクライアントのためのUI基盤
Yuichi Sakuraba
 

Ähnlich wie 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. まとめ • 複雑で大規模なフロントエンドで効果的 • 構造化できる • コード量は減らない