狠狠撸

狠狠撸Share a Scribd company logo
(C) ピコもん(株) All Rights Reserved.
Backbone.js で
ブラウザサイド MVC
2(C) ピコもん(株) All Rights Reserved. 2
自己紹介
-Introduction-
? Yukihiro Kitazawa ( 北澤 幸啓 )
? @kitadesign
? Work at ピコもん株式会社
? 元 mixi 、元 CRH 、元〇〇、 yahoo とかにも行ってました、その他いっぱい
? Android アプリを 16 個くらい作ってマーケットで出してます
(C) ピコもん(株) All Rights Reserved. 3
Backbone.js ってなに?
?ブラウザサイド Javascript のフレームワーク
? Javascript での大規模開発に向いています。
どんな特徴?
? MVC アーキテクチャ
?オブジェクト指向
?イベント駆動
完全依存ライブラリ
? Underscore.js
実務依存ライブラリ
? json2, jQuery or Zepto
(C) ピコもん(株) All Rights Reserved. 4
GUI での MVC とは
サーバサイドではよく MVC を耳にするけど
Web サービスだと大体こんな感じ
(C) ピコもん(株) All Rights Reserved. 5
GUI での MVC とは
ブラウザサイド Javascript ではどうなる?
レンダリング済
み HTML
Controller
View
Model
Server
WebStorage
Cookieイベント設置
イベント発火
ブラウザ内外のデータストアや API
表示変更
API など
データ変更
データ登録
データ取得
表示切替
(C) ピコもん(株) All Rights Reserved. 6
Backbone.js で MVC
Backbone.Model
Backbone.Collection
Backbone.View
Backbone.Router
Model の役割
Controller や
View の役割
呼び出し 変更通知
ユーザ
Backbone.Router
DOM を変更
DOM イベント
操作
7(C) ピコもん(株) All Rights Reserved. 7
こんな感じのサービスを作るには
エンターしたら保存
チェックしたら全てに
チェック
チェックしたらテキスト
に中央線
ダブルクリックで編集で
きるように
チェックされてない
残っているタスクを
確認してカウント表示
リストにマウスオーバー
したら表示
押したら消す
押されたらチェックされ
ている奴を削除する
タスクが0件になったら
このエリアを隠す
このくらい必要
8(C) ピコもん(株) All Rights Reserved. 8
jQuery で実装しようとすると
$( function () {
var $input_main = $( ‘#input_main’ );
var $tasklist_area = $( ‘#tasklist_area’ );
var $check_complete = $( ‘#checkbox_comp’ );
var $footer_area = $( ‘#footer’ );
var $remove_button = $footer_area.find( ‘.remove’ );
var $count = $footer_area.find( ‘.count’ );
var storage = window.localStorage;
var done_count = 0;
var total_count = 0;
$footer_area.hide();
$input_main.keypress( function ( event ) {
if ( event.keyCode != 13 ) return;
if ( !this.val() ) return;
var $template = $( $( ‘stats-template’ ).html() );
$tasklist_area.append( $template );
$template.find( ‘.check_done’ ).on( ‘click’, function ( event ) {
if ( this.hasClass( ‘done’ ) ) {
done_count--;
return this.removeClass( ‘done’ );
}
done_count++;
this.addClass( ‘done’ );
} );
$template.find( ‘.text’ ).on( ‘dblclick’, function(){
this.parent().find( ‘input’ ).show();
this.hide();
} );
$template.find( ‘input’ ).keypress( function ( event ) {
if ( event.keyConde != 13 ) return;
if ( !this.val() ) {
// 削除処理
}
//Storage に保存して hide と text を更新して show
} );
Storage に保存して hide と text を更新して show
} );
$template.find( ‘img.remove’ ).on( ‘click’, function () {
// Storage から削除して DOM も削除
// カウントをデクリメントして表示を更新
} );
$template.find( ‘div.row’ ).hover( function () {
$template.find( ‘img.remove’ ).show();
}, function () {
$template.find( ‘img.remove’ ).hide();
} );
} );
$remove_button.on( ‘click’, function () {
var $check = $tasklist_area.find( ‘.check_done’ );
$check.filter( ‘.done[checked]’ ).each( function ( value ) {
value.parent().remove();
storage.deleteItem( $check.indexOf( value ) );
} );
done_count = 0;
} );
$check_complete.on( ‘click’, function () {
if ( /* チェックされた / ) {*
// 全てのチェックボックスにチェック
// カウントを足し算
// 表示を変更
} else {
// 全てのチェックボックスのチェックを外す
// カウントを0
// 表示を変更
}
} );
var data = storage.getItem( ‘todos’ );
data = JSON.parse( data );
if ( data.length > 1 ) {
// template からデータを構築して表示
}
} );
使う DOM を取り出し
エンターされたら
テンプレートを DOM に挿入して
付けたいイベントを色々とセット
その間にストレージを意識して
入れたり消したり
DOM に何度もアクセスして
ストレージも操作
元々保存してある奴を表示するので
これまた色々と DOM を構築
こんな感じ?
グチャグチャになりやすく
コード改変もややこしい
他の人が触りにく
(C) ピコもん(株) All Rights Reserved. 9
Backbone.js を使ってオブジェクト化
全体のプレゼンテーション層
AppView
1タスクのプレゼンテーション層
TodoView
全体タスクのコレクション
TodoList
1タスクのモデル層
Todo
(C) ピコもん(株) All Rights Reserved. 10
図にするとこう
TodoList
TodoView Todo
AppView 使用
作成 複数保持?管理
HTML
操作
操作
内包
Server
WebStorage
Cookie
API とか
更新
取得
更新
プレゼンテーション層 ビジネスロジック層
すっきり
(C) ピコもん(株) All Rights Reserved. 11
デモ

More Related Content

What's hot (19)

PDF
WebGL and Three.js
yomotsu
?
PDF
补蝉尘.箩蝉と奥别产础蝉蝉别尘产濒测って実际なんなの?
Yosuke Onoue
?
PDF
颈笔丑辞苍别アプリ开発入门(1)ボタンと画像
Toshio Ehara
?
ODP
月曜だからデザインパターンでも勉強しよう vol.4 Builder
Takaaki Hirano
?
PDF
これからのJSの話をしよう ~jQueryで作るTwitterアプリ~ (Gunma.web #2 2010/10/9)
parrotstudio
?
PDF
覚醒!闯补惫补厂肠谤颈辫迟
Haraguchi Go
?
PDF
罢丑谤别别.箩蝉で3顿気分
Toshio Ehara
?
PDF
あの时础苍驳耻濒补谤闯厂と出会った僕らは
Muyuu Fujita
?
PPTX
Metro スタイル アプリで印刷
Mitsuhito Ishino
?
PDF
Grunt front-osaka-1-lt-tanaka
Hisateru Tanaka
?
PDF
Try Webworkers
Hideaki Miyake
?
KEY
Core Graphicsでつくる自作UIコンポーネント入門
cocopon
?
PPTX
モテる JavaScript
Osamu Monoe
?
PDF
Backbone.js
daisuke shimizu
?
PDF
Type Safe Assets Handling in Swift
Kazunobu Tasaka
?
PDF
情報編集(Web) HTML5 実践1 Canvas + Javascriptで図形を描く
Atsushi Tadokoro
?
PDF
Webデザイン 第10回:HTML5実践 Three.jsで3Dプログラミング
Atsushi Tadokoro
?
PDF
画像を缩小するお话
technocat
?
ODP
20080426.1000speakers:4
IWATA Susumu
?
WebGL and Three.js
yomotsu
?
补蝉尘.箩蝉と奥别产础蝉蝉别尘产濒测って実际なんなの?
Yosuke Onoue
?
颈笔丑辞苍别アプリ开発入门(1)ボタンと画像
Toshio Ehara
?
月曜だからデザインパターンでも勉強しよう vol.4 Builder
Takaaki Hirano
?
これからのJSの話をしよう ~jQueryで作るTwitterアプリ~ (Gunma.web #2 2010/10/9)
parrotstudio
?
覚醒!闯补惫补厂肠谤颈辫迟
Haraguchi Go
?
罢丑谤别别.箩蝉で3顿気分
Toshio Ehara
?
あの时础苍驳耻濒补谤闯厂と出会った僕らは
Muyuu Fujita
?
Metro スタイル アプリで印刷
Mitsuhito Ishino
?
Grunt front-osaka-1-lt-tanaka
Hisateru Tanaka
?
Try Webworkers
Hideaki Miyake
?
Core Graphicsでつくる自作UIコンポーネント入門
cocopon
?
モテる JavaScript
Osamu Monoe
?
Backbone.js
daisuke shimizu
?
Type Safe Assets Handling in Swift
Kazunobu Tasaka
?
情報編集(Web) HTML5 実践1 Canvas + Javascriptで図形を描く
Atsushi Tadokoro
?
Webデザイン 第10回:HTML5実践 Three.jsで3Dプログラミング
Atsushi Tadokoro
?
画像を缩小するお话
technocat
?
20080426.1000speakers:4
IWATA Susumu
?

Similar to 20130924 Picomon CRH勉強会 (20)

PDF
はじめよう Backbone.js
Hiroki Toyokawa
?
PDF
Knockout handson
Go Tanaka
?
PDF
Study Intro Backbone
Gensei Kawasaki
?
PDF
Introduction for Browser Side MVC
Ryunosuke SATO
?
PDF
碍苍辞肠办辞耻迟冲エンジニア勉强会20131120
エンジニア勉強会 エスキュービズム
?
KEY
Knockout
Kazuhiro Eguchi
?
PDF
実践Backbone.Marionette 現場の悩みと解決まで
Ryuma Tsukano
?
PDF
実践碍苍辞肠办辞耻迟
Kazuhiro Eguchi
?
PDF
笔补谤蝉别.肠辞尘と始める叠补肠办产辞苍别.箩蝉入门(箩蝉肠补蹿别7)
Ryuma Tsukano
?
PDF
Knockout.js を利用したインタラクティブ web アプリケーション開発
Daizen Ikehara
?
PDF
Knockout を用いた Firefox OS アプリケーションの開発
Kentaro Iizuka
?
PDF
5分でわかる?Backbone.js ことはじめ
Kohei Kadowaki
?
PDF
Backbone model collection (jscafe 8)
Ryuma Tsukano
?
PDF
How do you like knockout?
Narami Kiyokura
?
PPTX
Sencha TouchでHTML5アプリを作ってみる
Tomonori Ohba
?
PPTX
忙しい人のための叠补肠办产辞苍别.箩蝉と础苍驳耻濒补谤.箩蝉入门
Toshiaki Maki
?
PDF
React.js + Flux入門 #scripty02
驰补丑辞辞!デベロッパーネットワーク
?
PDF
20130412 titanium meetupvol7
Hiroshi Oyamada
?
PDF
Xamarin て? ReactiveUI を使ってみた
Hironov OKUYAMA
?
PDF
叠补肠办产辞苍别.箩蝉入门
AdvancedTechNight
?
はじめよう Backbone.js
Hiroki Toyokawa
?
Knockout handson
Go Tanaka
?
Study Intro Backbone
Gensei Kawasaki
?
Introduction for Browser Side MVC
Ryunosuke SATO
?
碍苍辞肠办辞耻迟冲エンジニア勉强会20131120
エンジニア勉強会 エスキュービズム
?
実践Backbone.Marionette 現場の悩みと解決まで
Ryuma Tsukano
?
実践碍苍辞肠办辞耻迟
Kazuhiro Eguchi
?
笔补谤蝉别.肠辞尘と始める叠补肠办产辞苍别.箩蝉入门(箩蝉肠补蹿别7)
Ryuma Tsukano
?
Knockout.js を利用したインタラクティブ web アプリケーション開発
Daizen Ikehara
?
Knockout を用いた Firefox OS アプリケーションの開発
Kentaro Iizuka
?
5分でわかる?Backbone.js ことはじめ
Kohei Kadowaki
?
Backbone model collection (jscafe 8)
Ryuma Tsukano
?
How do you like knockout?
Narami Kiyokura
?
Sencha TouchでHTML5アプリを作ってみる
Tomonori Ohba
?
忙しい人のための叠补肠办产辞苍别.箩蝉と础苍驳耻濒补谤.箩蝉入门
Toshiaki Maki
?
20130412 titanium meetupvol7
Hiroshi Oyamada
?
Xamarin て? ReactiveUI を使ってみた
Hironov OKUYAMA
?
叠补肠办产辞苍别.箩蝉入门
AdvancedTechNight
?
Ad

20130924 Picomon CRH勉強会

  • 1. (C) ピコもん(株) All Rights Reserved. Backbone.js で ブラウザサイド MVC
  • 2. 2(C) ピコもん(株) All Rights Reserved. 2 自己紹介 -Introduction- ? Yukihiro Kitazawa ( 北澤 幸啓 ) ? @kitadesign ? Work at ピコもん株式会社 ? 元 mixi 、元 CRH 、元〇〇、 yahoo とかにも行ってました、その他いっぱい ? Android アプリを 16 個くらい作ってマーケットで出してます
  • 3. (C) ピコもん(株) All Rights Reserved. 3 Backbone.js ってなに? ?ブラウザサイド Javascript のフレームワーク ? Javascript での大規模開発に向いています。 どんな特徴? ? MVC アーキテクチャ ?オブジェクト指向 ?イベント駆動 完全依存ライブラリ ? Underscore.js 実務依存ライブラリ ? json2, jQuery or Zepto
  • 4. (C) ピコもん(株) All Rights Reserved. 4 GUI での MVC とは サーバサイドではよく MVC を耳にするけど Web サービスだと大体こんな感じ
  • 5. (C) ピコもん(株) All Rights Reserved. 5 GUI での MVC とは ブラウザサイド Javascript ではどうなる? レンダリング済 み HTML Controller View Model Server WebStorage Cookieイベント設置 イベント発火 ブラウザ内外のデータストアや API 表示変更 API など データ変更 データ登録 データ取得 表示切替
  • 6. (C) ピコもん(株) All Rights Reserved. 6 Backbone.js で MVC Backbone.Model Backbone.Collection Backbone.View Backbone.Router Model の役割 Controller や View の役割 呼び出し 変更通知 ユーザ Backbone.Router DOM を変更 DOM イベント 操作
  • 7. 7(C) ピコもん(株) All Rights Reserved. 7 こんな感じのサービスを作るには エンターしたら保存 チェックしたら全てに チェック チェックしたらテキスト に中央線 ダブルクリックで編集で きるように チェックされてない 残っているタスクを 確認してカウント表示 リストにマウスオーバー したら表示 押したら消す 押されたらチェックされ ている奴を削除する タスクが0件になったら このエリアを隠す このくらい必要
  • 8. 8(C) ピコもん(株) All Rights Reserved. 8 jQuery で実装しようとすると $( function () { var $input_main = $( ‘#input_main’ ); var $tasklist_area = $( ‘#tasklist_area’ ); var $check_complete = $( ‘#checkbox_comp’ ); var $footer_area = $( ‘#footer’ ); var $remove_button = $footer_area.find( ‘.remove’ ); var $count = $footer_area.find( ‘.count’ ); var storage = window.localStorage; var done_count = 0; var total_count = 0; $footer_area.hide(); $input_main.keypress( function ( event ) { if ( event.keyCode != 13 ) return; if ( !this.val() ) return; var $template = $( $( ‘stats-template’ ).html() ); $tasklist_area.append( $template ); $template.find( ‘.check_done’ ).on( ‘click’, function ( event ) { if ( this.hasClass( ‘done’ ) ) { done_count--; return this.removeClass( ‘done’ ); } done_count++; this.addClass( ‘done’ ); } ); $template.find( ‘.text’ ).on( ‘dblclick’, function(){ this.parent().find( ‘input’ ).show(); this.hide(); } ); $template.find( ‘input’ ).keypress( function ( event ) { if ( event.keyConde != 13 ) return; if ( !this.val() ) { // 削除処理 } //Storage に保存して hide と text を更新して show } ); Storage に保存して hide と text を更新して show } ); $template.find( ‘img.remove’ ).on( ‘click’, function () { // Storage から削除して DOM も削除 // カウントをデクリメントして表示を更新 } ); $template.find( ‘div.row’ ).hover( function () { $template.find( ‘img.remove’ ).show(); }, function () { $template.find( ‘img.remove’ ).hide(); } ); } ); $remove_button.on( ‘click’, function () { var $check = $tasklist_area.find( ‘.check_done’ ); $check.filter( ‘.done[checked]’ ).each( function ( value ) { value.parent().remove(); storage.deleteItem( $check.indexOf( value ) ); } ); done_count = 0; } ); $check_complete.on( ‘click’, function () { if ( /* チェックされた / ) {* // 全てのチェックボックスにチェック // カウントを足し算 // 表示を変更 } else { // 全てのチェックボックスのチェックを外す // カウントを0 // 表示を変更 } } ); var data = storage.getItem( ‘todos’ ); data = JSON.parse( data ); if ( data.length > 1 ) { // template からデータを構築して表示 } } ); 使う DOM を取り出し エンターされたら テンプレートを DOM に挿入して 付けたいイベントを色々とセット その間にストレージを意識して 入れたり消したり DOM に何度もアクセスして ストレージも操作 元々保存してある奴を表示するので これまた色々と DOM を構築 こんな感じ? グチャグチャになりやすく コード改変もややこしい 他の人が触りにく
  • 9. (C) ピコもん(株) All Rights Reserved. 9 Backbone.js を使ってオブジェクト化 全体のプレゼンテーション層 AppView 1タスクのプレゼンテーション層 TodoView 全体タスクのコレクション TodoList 1タスクのモデル層 Todo
  • 10. (C) ピコもん(株) All Rights Reserved. 10 図にするとこう TodoList TodoView Todo AppView 使用 作成 複数保持?管理 HTML 操作 操作 内包 Server WebStorage Cookie API とか 更新 取得 更新 プレゼンテーション層 ビジネスロジック層 すっきり
  • 11. (C) ピコもん(株) All Rights Reserved. 11 デモ