SlideShare ist ein Scribd-Unternehmen logo
1 von 11
(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
デモ

Weitere ähnliche Inhalte

Was ist angesagt?

WebGL and Three.js
WebGL and Three.jsWebGL and Three.js
WebGL and Three.jsyomotsu
 
asm.jsとWebAssemblyって実際なんなの?
asm.jsとWebAssemblyって実際なんなの?asm.jsとWebAssemblyって実際なんなの?
asm.jsとWebAssemblyって実際なんなの?Yosuke Onoue
 
iPhoneアプリ開発入門(1)ボタンと画像
iPhoneアプリ開発入門(1)ボタンと画像iPhoneアプリ開発入門(1)ボタンと画像
iPhoneアプリ開発入門(1)ボタンと画像Toshio Ehara
 
Objective-C が好きになる Tips & Hack
Objective-C が好きになる Tips & HackObjective-C が好きになる Tips & Hack
Objective-C が好きになる Tips & HackTaketo Sano
 
月曜だからデザインパターンでも勉強しよう vol.4 Builder
月曜だからデザインパターンでも勉強しよう vol.4 Builder月曜だからデザインパターンでも勉強しよう vol.4 Builder
月曜だからデザインパターンでも勉強しよう vol.4 BuilderTakaaki Hirano
 
これからのJSの話をしよう ~jQueryで作るTwitterアプリ~ (Gunma.web #2 2010/10/9)
これからのJSの話をしよう ~jQueryで作るTwitterアプリ~ (Gunma.web #2 2010/10/9)これからのJSの話をしよう ~jQueryで作るTwitterアプリ~ (Gunma.web #2 2010/10/9)
これからのJSの話をしよう ~jQueryで作るTwitterアプリ~ (Gunma.web #2 2010/10/9)parrotstudio
 
Three.jsで3D気分
Three.jsで3D気分 Three.jsで3D気分
Three.jsで3D気分 Toshio Ehara
 
あの時AngularJSと出会った僕らは
あの時AngularJSと出会った僕らはあの時AngularJSと出会った僕らは
あの時AngularJSと出会った僕らはMuyuu Fujita
 
Metro スタイル アプリで印刷
Metro スタイル アプリで印刷Metro スタイル アプリで印刷
Metro スタイル アプリで印刷Mitsuhito Ishino
 
Grunt front-osaka-1-lt-tanaka
Grunt front-osaka-1-lt-tanakaGrunt front-osaka-1-lt-tanaka
Grunt front-osaka-1-lt-tanakaHisateru Tanaka
 
Core Graphicsでつくる自作UIコンポーネント入門
Core Graphicsでつくる自作UIコンポーネント入門Core Graphicsでつくる自作UIコンポーネント入門
Core Graphicsでつくる自作UIコンポーネント入門cocopon
 
モテる JavaScript
モテる JavaScriptモテる JavaScript
モテる JavaScriptOsamu Monoe
 
Type Safe Assets Handling in Swift
Type Safe Assets Handling in SwiftType Safe Assets Handling in Swift
Type Safe Assets Handling in SwiftKazunobu Tasaka
 
情報編集(Web) HTML5 実践1 Canvas + Javascriptで図形を描く
情報編集(Web) HTML5 実践1 Canvas + Javascriptで図形を描く情報編集(Web) HTML5 実践1 Canvas + Javascriptで図形を描く
情報編集(Web) HTML5 実践1 Canvas + Javascriptで図形を描くAtsushi Tadokoro
 
Webデザイン 第10回:HTML5実践 Three.jsで3Dプログラミング
Webデザイン 第10回:HTML5実践 Three.jsで3DプログラミングWebデザイン 第10回:HTML5実践 Three.jsで3Dプログラミング
Webデザイン 第10回:HTML5実践 Three.jsで3DプログラミングAtsushi Tadokoro
 
画像を縮小するお話
画像を縮小するお話画像を縮小するお話
画像を縮小するお話technocat
 
20080426.1000speakers:4
20080426.1000speakers:420080426.1000speakers:4
20080426.1000speakers:4IWATA Susumu
 

Was ist angesagt? (20)

WebGL and Three.js
WebGL and Three.jsWebGL and Three.js
WebGL and Three.js
 
asm.jsとWebAssemblyって実際なんなの?
asm.jsとWebAssemblyって実際なんなの?asm.jsとWebAssemblyって実際なんなの?
asm.jsとWebAssemblyって実際なんなの?
 
iPhoneアプリ開発入門(1)ボタンと画像
iPhoneアプリ開発入門(1)ボタンと画像iPhoneアプリ開発入門(1)ボタンと画像
iPhoneアプリ開発入門(1)ボタンと画像
 
Objective-C が好きになる Tips & Hack
Objective-C が好きになる Tips & HackObjective-C が好きになる Tips & Hack
Objective-C が好きになる Tips & Hack
 
月曜だからデザインパターンでも勉強しよう vol.4 Builder
月曜だからデザインパターンでも勉強しよう vol.4 Builder月曜だからデザインパターンでも勉強しよう vol.4 Builder
月曜だからデザインパターンでも勉強しよう vol.4 Builder
 
これからのJSの話をしよう ~jQueryで作るTwitterアプリ~ (Gunma.web #2 2010/10/9)
これからのJSの話をしよう ~jQueryで作るTwitterアプリ~ (Gunma.web #2 2010/10/9)これからのJSの話をしよう ~jQueryで作るTwitterアプリ~ (Gunma.web #2 2010/10/9)
これからのJSの話をしよう ~jQueryで作るTwitterアプリ~ (Gunma.web #2 2010/10/9)
 
覚醒!JavaScript
覚醒!JavaScript覚醒!JavaScript
覚醒!JavaScript
 
Three.jsで3D気分
Three.jsで3D気分 Three.jsで3D気分
Three.jsで3D気分
 
あの時AngularJSと出会った僕らは
あの時AngularJSと出会った僕らはあの時AngularJSと出会った僕らは
あの時AngularJSと出会った僕らは
 
Metro スタイル アプリで印刷
Metro スタイル アプリで印刷Metro スタイル アプリで印刷
Metro スタイル アプリで印刷
 
Grunt front-osaka-1-lt-tanaka
Grunt front-osaka-1-lt-tanakaGrunt front-osaka-1-lt-tanaka
Grunt front-osaka-1-lt-tanaka
 
Try Webworkers
Try WebworkersTry Webworkers
Try Webworkers
 
Core Graphicsでつくる自作UIコンポーネント入門
Core Graphicsでつくる自作UIコンポーネント入門Core Graphicsでつくる自作UIコンポーネント入門
Core Graphicsでつくる自作UIコンポーネント入門
 
モテる JavaScript
モテる JavaScriptモテる JavaScript
モテる JavaScript
 
Backbone.js
Backbone.jsBackbone.js
Backbone.js
 
Type Safe Assets Handling in Swift
Type Safe Assets Handling in SwiftType Safe Assets Handling in Swift
Type Safe Assets Handling in Swift
 
情報編集(Web) HTML5 実践1 Canvas + Javascriptで図形を描く
情報編集(Web) HTML5 実践1 Canvas + Javascriptで図形を描く情報編集(Web) HTML5 実践1 Canvas + Javascriptで図形を描く
情報編集(Web) HTML5 実践1 Canvas + Javascriptで図形を描く
 
Webデザイン 第10回:HTML5実践 Three.jsで3Dプログラミング
Webデザイン 第10回:HTML5実践 Three.jsで3DプログラミングWebデザイン 第10回:HTML5実践 Three.jsで3Dプログラミング
Webデザイン 第10回:HTML5実践 Three.jsで3Dプログラミング
 
画像を縮小するお話
画像を縮小するお話画像を縮小するお話
画像を縮小するお話
 
20080426.1000speakers:4
20080426.1000speakers:420080426.1000speakers:4
20080426.1000speakers:4
 

Ähnlich wie 20130924 Picomon CRH勉強会

わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~normalian
 
jQuery Performance Tips – jQueryにおける高速化 -
jQuery Performance Tips – jQueryにおける高速化 -jQuery Performance Tips – jQueryにおける高速化 -
jQuery Performance Tips – jQueryにおける高速化 -Hayato Mizuno
 
データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回Naoyuki Yamada
 
3DCG(3Dコンピュータグラフィック)をWebGLで始めよう
3DCG(3Dコンピュータグラフィック)をWebGLで始めよう3DCG(3Dコンピュータグラフィック)をWebGLで始めよう
3DCG(3Dコンピュータグラフィック)をWebGLで始めようAdvancedTechNight
 
ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用Yatabe Terumasa
 
Magento meet up Tokyo#1 for Design
Magento meet up Tokyo#1 for DesignMagento meet up Tokyo#1 for Design
Magento meet up Tokyo#1 for DesignMiho Nakano
 
8分で分かる最近のCakePHP
8分で分かる最近のCakePHP8分で分かる最近のCakePHP
8分で分かる最近のCakePHPMasashi Shinbara
 
はじめよう Backbone.js
はじめよう Backbone.jsはじめよう Backbone.js
はじめよう Backbone.jsHiroki Toyokawa
 
Data apiで実現 進化するwebの世界
Data apiで実現 進化するwebの世界Data apiで実現 進化するwebの世界
Data apiで実現 進化するwebの世界Yuji Takayama
 
scala+liftで遊ぼう
scala+liftで遊ぼうscala+liftで遊ぼう
scala+liftで遊ぼうyouku
 
Next2Dで始めるゲーム開発 - Game Development Starting with Next2D
Next2Dで始めるゲーム開発  - Game Development Starting with Next2DNext2Dで始めるゲーム開発  - Game Development Starting with Next2D
Next2Dで始めるゲーム開発 - Game Development Starting with Next2DToshiyuki Ienaga
 
レスポンシブWebデザイン【発展編】
レスポンシブWebデザイン【発展編】レスポンシブWebデザイン【発展編】
レスポンシブWebデザイン【発展編】Yasuhito Yabe
 
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話Akira Inoue
 
Tide - SmalltalkでSPA
Tide - SmalltalkでSPATide - SmalltalkでSPA
Tide - SmalltalkでSPAMasashi Umezawa
 
「html5 boilerplate」から考える、これからのマークアップ
「html5 boilerplate」から考える、これからのマークアップ「html5 boilerplate」から考える、これからのマークアップ
「html5 boilerplate」から考える、これからのマークアップYasuhito Yabe
 
Head toward Java 16 (Night Seminar Edition)
Head toward Java 16 (Night Seminar Edition)Head toward Java 16 (Night Seminar Edition)
Head toward Java 16 (Night Seminar Edition)Yuji Kubota
 
LabVIEW NXG Web Module Training Slide
LabVIEW NXG Web Module Training SlideLabVIEW NXG Web Module Training Slide
LabVIEW NXG Web Module Training SlideYusuke Tochigi
 

Ähnlich wie 20130924 Picomon CRH勉強会 (20)

わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
 
jQuery Performance Tips – jQueryにおける高速化 -
jQuery Performance Tips – jQueryにおける高速化 -jQuery Performance Tips – jQueryにおける高速化 -
jQuery Performance Tips – jQueryにおける高速化 -
 
データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回
 
3DCG(3Dコンピュータグラフィック)をWebGLで始めよう
3DCG(3Dコンピュータグラフィック)をWebGLで始めよう3DCG(3Dコンピュータグラフィック)をWebGLで始めよう
3DCG(3Dコンピュータグラフィック)をWebGLで始めよう
 
ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用
 
Magento meet up Tokyo#1 for Design
Magento meet up Tokyo#1 for DesignMagento meet up Tokyo#1 for Design
Magento meet up Tokyo#1 for Design
 
8分で分かる最近のCakePHP
8分で分かる最近のCakePHP8分で分かる最近のCakePHP
8分で分かる最近のCakePHP
 
Try Jetpack
Try JetpackTry Jetpack
Try Jetpack
 
はじめよう Backbone.js
はじめよう Backbone.jsはじめよう Backbone.js
はじめよう Backbone.js
 
Data apiで実現 進化するwebの世界
Data apiで実現 進化するwebの世界Data apiで実現 進化するwebの世界
Data apiで実現 進化するwebの世界
 
scala+liftで遊ぼう
scala+liftで遊ぼうscala+liftで遊ぼう
scala+liftで遊ぼう
 
Next2Dで始めるゲーム開発 - Game Development Starting with Next2D
Next2Dで始めるゲーム開発  - Game Development Starting with Next2DNext2Dで始めるゲーム開発  - Game Development Starting with Next2D
Next2Dで始めるゲーム開発 - Game Development Starting with Next2D
 
レスポンシブWebデザイン【発展編】
レスポンシブWebデザイン【発展編】レスポンシブWebデザイン【発展編】
レスポンシブWebデザイン【発展編】
 
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
 
ScalaMatsuri 2016
ScalaMatsuri 2016ScalaMatsuri 2016
ScalaMatsuri 2016
 
jQuery超入門編
jQuery超入門編jQuery超入門編
jQuery超入門編
 
Tide - SmalltalkでSPA
Tide - SmalltalkでSPATide - SmalltalkでSPA
Tide - SmalltalkでSPA
 
「html5 boilerplate」から考える、これからのマークアップ
「html5 boilerplate」から考える、これからのマークアップ「html5 boilerplate」から考える、これからのマークアップ
「html5 boilerplate」から考える、これからのマークアップ
 
Head toward Java 16 (Night Seminar Edition)
Head toward Java 16 (Night Seminar Edition)Head toward Java 16 (Night Seminar Edition)
Head toward Java 16 (Night Seminar Edition)
 
LabVIEW NXG Web Module Training Slide
LabVIEW NXG Web Module Training SlideLabVIEW NXG Web Module Training Slide
LabVIEW NXG Web Module Training Slide
 

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 デモ