135
ブラウザサイド MVC 入門 佐藤 竜之介(Ryunosuke SATO) Sapporo.js SaCSS vol.40 - 2012.12.15 http://www.flickr.com/photos/39943270@N07/6276483269

Introduction for Browser Side MVC

Embed Size (px)

DESCRIPTION

# 概要 画面遷移を行わず、1枚の html 上で対話的に操作するような web アプリケーションを目にする機会が増えてきました。 そんなアプリケーションを開発する際、jQuery 主体だったこれまでの開発スタイルだと画面表示と機能が切り離せなくなってしまい、変更に弱い作りになってしまうことになるでしょう。 この問題に対処するにはどうすればよいでしょう? そんなときは先人の知恵を参考に、その解決策を探してみるのはいかがでしょうか。 ユーザからのインタラクションを受け付けるアプリケーションを上手く構築していく際のやり方として、MVC パターンが広く知られています。 本セッションでは、ブラウザ上での JavaScript の MVC の原点を辿り、その実装のひとつである Backbone.js を例にとって、整理されたコードについて考えてみたいと思います。 SaCSS vol40 ( http://www.sacss.net/special03/ )での発表資料です。

Citation preview

Page 1: Introduction for Browser Side MVC

ブラウザサイド MVC 入門

佐藤 竜之介(Ryunosuke SATO)Sapporo.js

SaCSS vol.40 - 2012.12.15

http://www.flickr.com/photos/39943270@N07/6276483269

Page 2: Introduction for Browser Side MVC

提供

Sapporo.js

Community for people who like JavaScript.

Page 3: Introduction for Browser Side MVC

自己紹介

Page 4: Introduction for Browser Side MVC

Sapporo.js

http://sapporojs.org

Page 5: Introduction for Browser Side MVC

http://connpass.com/event/1368/

Sapporo.js - 2012.12.16

Backbone.js handson: @onjiro_mohyahya

Page 6: Introduction for Browser Side MVC
Page 7: Introduction for Browser Side MVC

@tricknotes

Page 8: Introduction for Browser Side MVC

/* * PR * Important!

Page 9: Introduction for Browser Side MVC

JavaScript 道場

超豪華講師JavaScript コーディング実践

練習!練習!練習!2013.02.23(土)@札幌市産業振興センター

Page 10: Introduction for Browser Side MVC

JavaScript 道場

超豪華講師JavaScript コーディング実践

練習!練習!練習!2013.02.23(土)@札幌市産業振興センター

Comming soon...

Page 11: Introduction for Browser Side MVC

*/

Page 12: Introduction for Browser Side MVC

よろしくお願いします

Page 13: Introduction for Browser Side MVC

ブラウザサイド MVC 入門

佐藤 竜之介(Ryunosuke SATO)Sapporo.js

SaCSS vol.40 - 2012.12.15

http://www.flickr.com/photos/39943270@N07/6276483269

Page 14: Introduction for Browser Side MVC

本発表について

Page 15: Introduction for Browser Side MVC

【開発編】ブラウザサイド【開発編】ブラウザサイド MVC MVC 入門(佐藤竜之介)入門(佐藤竜之介)

画面遷移を行わず、1枚の html 上で対話的に操作するような web アプリケーションを目にする機会が増えてきました。そんなアプリケーションを開発する際、jQuery 主体だったこれまでの開発スタイルだと画面表示と機能が切り離せなくなってしまい、変更に弱い作りになってしまうことになるでしょう。

この問題に対処するにはどうすればよいでしょう?

そんなときは先人の知恵を参考に、その解決策を探してみるのはいかがでしょうか。ユーザからのインタラクションを受け付けるアプリケーションを上手く構築していく際のやり方として、MVC パターンが広く知られています。

本セッションでは、ブラウザ上での JavaScript の MVC の原点を辿り、その実装のひとつである Backbone.js を例にとって、整理されたコードについて考えてみたいと思います。

【 編】 を利用した開発環境パワーアップ講座(やまがあつ)

http://www.sacss.net/special03/

Page 16: Introduction for Browser Side MVC

はじめに

Page 17: Introduction for Browser Side MVC

ちょっと考えてみましょう

Page 18: Introduction for Browser Side MVC

お題

Page 19: Introduction for Browser Side MVC

「やることリストを作ってください」

* タスクを登録できること* 完了したタスクをチェックできること* タスクを消すことができること

Page 20: Introduction for Browser Side MVC

Samplehttp://tasklist-demo.herokuapp.com/

Page 21: Introduction for Browser Side MVC

??どんなアプローチをとりますか

Page 22: Introduction for Browser Side MVC

例えば...jQuery だけ使って、

ひとつひとつ作っていった場合

Page 23: Introduction for Browser Side MVC
Page 24: Introduction for Browser Side MVC

* enter が押されると... * テキストを取得してやることを追加する * 全件数をひとつ増やす

Page 25: Introduction for Browser Side MVC
Page 26: Introduction for Browser Side MVC

* checkbox が変化すると... * やることに取り消し線を引く * 完了件数を増やす

Page 27: Introduction for Browser Side MVC
Page 28: Introduction for Browser Side MVC

* 削除ボタンを押すと... * やることを削除する * 件数をひとつ減らす

Page 29: Introduction for Browser Side MVC

* checkbox が変化すると... * やることに取り消し線を引く * 完了件数を増やす

* 削除ボタンを押すと... * やることを削除する * 件数をひとつ減らす

* enter が押されると... * テキストを取得してやることを追加する * 全件数をひとつ増やす

Page 30: Introduction for Browser Side MVC

* enter が押されると... * テキストを取得してやることを追加する * 全件数をひとつ増やす

* checkbox が変化すると... * やることに取り消し線を引く * 完了件数を増やす

* 削除ボタンを押すと... * やることを削除する * 件数をひとつ減らす

Page 31: Introduction for Browser Side MVC

「ところでさ、終わったタスクを

まとめて削除したいんだけど...」

Page 32: Introduction for Browser Side MVC

http://commonpost.boo.jp/?attachment_id=21729

えっ

Page 33: Introduction for Browser Side MVC
Page 34: Introduction for Browser Side MVC

* まとめて削除ボタンを押すと... * チェックがついているタスクを探す * チェックがついているタスクを削除する * 全件数を更新する * 完了件数を更新する

Page 35: Introduction for Browser Side MVC

* checkbox が変化すると... * やることに取り消し線を引く * 完了件数を増やす

* 削除ボタンを押すと... * やることを削除する * 件数をひとつ減らす

* まとめて削除ボタンを押すと... * チェックがついているタスクを探す * チェックがついているタスクを削除する * 全件数を更新する * 完了件数を更新する

* enter が押されると... * テキストを取得してやることを追加する * 全件数をひとつ増やす

Page 36: Introduction for Browser Side MVC

* checkbox が変化すると... * やることに取り消し線を引く * 完了件数を増やす

* 削除ボタンを押すと... * やることを削除する * 件数をひとつ減らす

* まとめて削除ボタンを押すと... * チェックがついているタスクを探す * チェックがついているタスクを削除する * 全件数を更新する * 完了件数を更新する

* enter が押されると... * テキストを取得してやることを追加する * 全件数をひとつ増やす

Page 38: Introduction for Browser Side MVC

これについてはまた後で :-)

Page 39: Introduction for Browser Side MVC

* MVC の背景* MVC って何?* ブラウザの中でのMVC

今日のお品書き

Page 40: Introduction for Browser Side MVC

* MVC の背景* MVC って何?* ブラウザの中でのMVC

Page 41: Introduction for Browser Side MVC

ひとつひとつ作って、だいぶ複雑になってしまっていた

最初の例

Page 42: Introduction for Browser Side MVC

http://www.flickr.com/photos/pappuradonkarume/4711288623

変更が困難

Page 43: Introduction for Browser Side MVC

この複雑さの原因は何でしょう??

Page 44: Introduction for Browser Side MVC

* checkbox が変化すると... * やることに取り消し線を引く * 完了件数を増やす

* 削除ボタンを押すと... * やることを削除する * 件数をひとつ減らす

* enter が押されると... * テキストを取得してやることを追加する * 全件数をひとつ増やす

Page 45: Introduction for Browser Side MVC

リスト表示

取り消し線

件数表示

入力フォーム

完了チェック

削除ボタン

Page 46: Introduction for Browser Side MVC

リスト表示

取り消し線

件数表示

入力フォーム

完了チェック

削除ボタン

全部削除ボタン

Page 47: Introduction for Browser Side MVC

リスト表示

取り消し線

件数表示

入力フォーム

完了チェック

削除ボタン

全部削除ボタン

Page 48: Introduction for Browser Side MVC

それぞれのイベントハンドラの中で、関係のある表示部分をすべて更新している

“矢印が多い”

Page 49: Introduction for Browser Side MVC

“機能” と “表示” が一緒になっているので、ひとつの変更でもあっちもこっちも直す必要がある

他にも、 html のマークアップの変更や、DOM 構造の変更も困難...

Page 50: Introduction for Browser Side MVC

整理

どうやって

する?

Page 51: Introduction for Browser Side MVC

管理したいんだっけ?

“何を”

Page 52: Introduction for Browser Side MVC

「やることリストを作ってください」

* タスクを登録できること* 完了したタスクをチェックできること* タスクを消すことができること

Page 53: Introduction for Browser Side MVC

“やることリスト”

Page 54: Introduction for Browser Side MVC

リスト表示

取り消し線

件数表示

入力フォーム

完了チェック

削除ボタン

やることリスト

Page 55: Introduction for Browser Side MVC

リスト表示

取り消し線

件数表示

入力フォーム

完了チェック

削除ボタン

やることリスト

ユーザが入力した!

ひとつ増やす

増えたよ!

更新する

更新する

増えたよ!

Page 56: Introduction for Browser Side MVC

を抽出する

本質的な部分

Page 57: Introduction for Browser Side MVC

解決するための、先人の知恵

上手く整理するためのコツ

Page 58: Introduction for Browser Side MVC

MVC(様々な形で実装されながら、今日に至る)

One of the architecture pattern

Page 59: Introduction for Browser Side MVC

* MVC の背景* MVC って何?* ブラウザの中でのMVC

Page 60: Introduction for Browser Side MVC

http://www.amazon.co.jp/dp/4764902834

ソフトウェアアーキテクチャソフトウェア開発のためのパターン体系

Page 61: Introduction for Browser Side MVC

アプリケーションを柔軟に保つための

先人の知恵

Page 62: Introduction for Browser Side MVC

ちょっと具体的に見てみましょう

Page 63: Introduction for Browser Side MVC

1. 前提2. 課題3. 解決方法

Page 64: Introduction for Browser Side MVC

‘‘1. 前提

人間とコンピュータが対話するという機能を備えたソフトウェアを開発する際にこのパターンを考慮する

- ソフトウェアアーキテクチャ -

Page 65: Introduction for Browser Side MVC

一枚の html の中で一部だけ更新するような、画面の切り替わりがないアプリケーションが対象

1. 前提

Page 66: Introduction for Browser Side MVC

‘‘- ソフトウェアアーキテクチャ -

2. 課題ユーザインターフェースの

変更は頻繁である

Page 67: Introduction for Browser Side MVC

✓ ここのとこ、ちょっと見た目を変えて欲しいんだけど...✓ こんな機能ほしいんだけど...✓ ブラウザの進化によって、コードを変えないといけない

これらが容易に起こる&

対応しなくてはいけない!!

2. 課題

Page 68: Introduction for Browser Side MVC

!!寿命が短い!ユーザインターフェースは

Page 69: Introduction for Browser Side MVC

これに対して、本質的な機能は変更頻度が低い

“やることリストを管理したい”

2. 課題

Page 70: Introduction for Browser Side MVC

‘‘- ソフトウェアアーキテクチャ -

3. 解決方法課題を解決するために、対話型アプリケーションは

処理、入力、出力の3つの部分に分割されるべきである

Page 71: Introduction for Browser Side MVC

機能とユーザインターフェースがくっついていると変更が大規模になる

分けましょう!

3. 解決方法

Page 72: Introduction for Browser Side MVC

リスト表示

取り消し線

件数表示

入力フォーム

完了チェック

削除ボタン

やることリスト

Page 73: Introduction for Browser Side MVC

リスト表示

取り消し線

件数表示

入力フォーム

完了チェック

削除ボタン

やることリスト

処理入力 出力

Page 74: Introduction for Browser Side MVC

データと処理: Modelユーザ入力: Controller表示形式: View

3. 解決方法

Page 75: Introduction for Browser Side MVC

ControllerViewModel

Page 76: Introduction for Browser Side MVC

リスト表示

取り消し線

件数表示

入力フォーム

完了チェック

削除ボタン

やることリスト

ModelController View

Page 77: Introduction for Browser Side MVC

リスト表示

取り消し線

件数表示

入力フォーム

完了チェック

削除ボタン

やることリスト

ModelController View

Page 78: Introduction for Browser Side MVC

入力・出力・処理を分ける

Model

Controller View

データと処理

表示の仕方イベントを受け付ける

イベント

Page 79: Introduction for Browser Side MVC

実際にどうやって分けていけばいいかは

この後で

Page 81: Introduction for Browser Side MVC

http://blog.shinetech.com/2011/07/25/cascading-select-boxes-with-backbone-js/

* MVC の背景 ✓ 画面の変更がしづらいことってありませんか?* MVC って何? ✓ アプリケーションを柔軟に保つための先人の知恵 ✓ 変化に対応するため、処理、入力、出力に分ける* ブラウザの中での MVC

ここまでの内容

Page 82: Introduction for Browser Side MVC

* MVC の背景* MVC って何?* ブラウザの中でのMVC

Page 83: Introduction for Browser Side MVC

??実際のコードでは

どう実現すればよいのか

Page 84: Introduction for Browser Side MVC

多くのフレームワーク

Page 85: Introduction for Browser Side MVC

Helping you select an MV* framework

IntroductionDevelopers these days are spoiled with choicewhen it comes to selecting an MV*framework for structuring and organizingtheir JavaScript web apps.

Backbone, Ember, AngularJS, Spine... the listof new and stable solutions continues togrow, but just how do you decide on which touse in a sea of so many options?

To help solve this problem, we createdTodoMVC - a project which offers the sameTodo application implemented using MV*concepts in most of the popular JavaScriptMV* frameworks of today.

TweetTweet 667

Our Stable Apps

Apps using RequireJS/AMD

Compare these to a non-framework implementation

* = App also demonstrates routing

What's new in 1.0.x Selecting a FrameworkOnce you've downloaded the latest releaseand played around with the apps, you'll wantto decide on a specific framework to try out.

Study the syntax required for defining models,views and (where applicable) controllers andclasses in the frameworks you're interested inand try your hand at editing the code to seehow it feels using it first-hand.

Please ensure that if you're happy with this,you do spend more time investigating theframework (including reading the official docs,the source and its complete feature list).There's often a lot more to a framework thanwhat we present in our examples.

Getting InvolvedIs there a bug we haven't fixed or an MV*framework you feel would benefit from beingincluded in TodoMVC?

If so, feel free to fork the repo, read ourcontribution guidelines, and submit a pullrequest — we'll be happy to review it forinclusion.

Make sure you use the template as a startingpoint and read the app specification.

Labs

Scroll down for 30+ more framework apps in Labs

Download (1.0.1)Download (1.0.1) View project on GitHubView project on GitHub

Backbone.js RR

Ember.js RR

AngularJS RR

Spine RR

KnockoutJS RR

Dojo RR

YUI RR

Batman.js RR

Closure RR

Agility.js RR

Knockback.js RR

GWT

Backbone.js + RequireJS RR

Ember.js + RequireJS RR

Vanilla JS

jQuery

RR

TodoMVC is an immensely valuable attempt at a difficult

problem - providing a structured way of comparing JS

libraries and frameworks. TodoMVC is a lone data point in a

sea of conjecture and opinion.

Justin Meyer

All main apps have been completelyrewritten for consistency

Routing has been added to many of these✔

We now have 30+ apps being worked onin Labs

We're using a kick-ass new template✔

Framework authors and contributors havebeen consulted to ensure our apps adhereto best practices

We're helping AMD users by adding AMDversions of many apps

Submit Pull Request »Submit Pull Request »

CanJS RR

http://addyosmani.github.com/todomvc/

Page 86: Introduction for Browser Side MVC

今回は

Page 88: Introduction for Browser Side MVC

今回は Backbone.js を例に挙げて見てみましょう

✓ 広く使われている✓ 仕組みが比較的シンプル

Page 89: Introduction for Browser Side MVC

Model

Controller View

データと処理

表示の仕方イベントを受け付ける

イベント

Page 90: Introduction for Browser Side MVC

Backbone.js のアプローチ

Model

View

データと処理

表示の仕方イベントを受け付ける

イベント

DOM

Page 91: Introduction for Browser Side MVC

実際には複数あるので...

Model

View

データと処理

表示の仕方イベントを受け付ける

イベント

DOM

View

ViewModel

Page 92: Introduction for Browser Side MVC

やることリストの例を考える

Page 93: Introduction for Browser Side MVC

TaskView

TotalView

createTaskView

Page 94: Introduction for Browser Side MVC

TaskView

TotalView

Task

createTaskView

TaskList

Page 95: Introduction for Browser Side MVC

TaskView

TotalView

Task

createTaskView

TaskList

タスクを作成する

Page 96: Introduction for Browser Side MVC

TaskView

TotalView

Task

createTaskView

TaskList

ユーザが入力した!

ひとつ増やす

追加する増えた!

増えた!

作成する

更新する

Page 97: Introduction for Browser Side MVC

TaskView

TotalView

Task

createTaskView

TaskList

タスクを完了する

Page 98: Introduction for Browser Side MVC

TaskView

TotalView

Task

createTaskView

TaskList

ユーザがチェックした!

変わった!

変更する

更新する

更新する

変わった!

変わった!

Page 99: Introduction for Browser Side MVC

TaskView

TotalView

Task

createTaskView

TaskList

タスクを削除する

Page 100: Introduction for Browser Side MVC

TaskView

TotalView

Task

createTaskView

TaskList

ユーザが削除ボタン押した!

削除された!

削除する

削除する

更新する

削除された!

変わった!

Page 101: Introduction for Browser Side MVC

整理

Page 102: Introduction for Browser Side MVC

TaskView

TotalView

Task

createTaskView

TaskList

Page 103: Introduction for Browser Side MVC

TaskView

TotalView

Task

createTaskView

TaskList

doneDeleteViewタスクを削除する

Page 104: Introduction for Browser Side MVC

TaskView

TotalView

Task

createTaskView

TaskList

doneDeleteView

ユーザが削除ボタン押した!

完了タスクを削除する

削除された!

更新された! 更新する

削除する

削除する

Page 105: Introduction for Browser Side MVC

機能を増やしても不自然な矢印は増えない

Page 106: Introduction for Browser Side MVC

動いているコードを見てみる

Page 107: Introduction for Browser Side MVC

TaskView

TotalView

Task

createTaskView

TaskList

Page 108: Introduction for Browser Side MVC

TaskView

TotalView

Task

createTaskView

TaskList

ユーザが入力した!

ひとつ増やす

追加する増えた!

増えた!

作成する

更新する

タスクを作成する

Page 109: Introduction for Browser Side MVC

TaskView

TotalView

Task

createTaskView

TaskList

ユーザが入力した!

ひとつ増やす

追加する増えた!

増えた!

作成する

更新する

Page 110: Introduction for Browser Side MVC

var Task = Backbone.Model.extend({ defaults: { done: false },

initialize: function(attrs) { var id = attrs && attrs.id || ('task-' + Number(new Date())); this.set('id', id); },

destroy: function() { this.trigger('destroy', this); this.off(); }}); var TaskList = Backbone.Collection.extend({

model: Task,

initialize: function() { this.on('destroy', this.remove, this); }});

Page 111: Introduction for Browser Side MVC

TaskView

TotalView

Task

createTaskView

TaskList

ユーザが入力した!

ひとつ増やす

追加する増えた!

増えた!

作成する

更新する

Page 112: Introduction for Browser Side MVC

var CreateTaskView = Backbone.View.extend({ events: { 'submit form': 'onSubmit' },

onSubmit: function() { var $text = this.$el.find('#text'), text = $text.val(); if (!text) { return false; }

this.createTask(text); $text.val(''); return false; },

createTask: function(text) { this.collection.add({text: text}); }});

Page 113: Introduction for Browser Side MVC

TaskView

TotalView

Task

createTaskView

TaskList

ユーザが入力した!

ひとつ増やす

追加する増えた!

増えた!

作成する

更新する

Page 114: Introduction for Browser Side MVC

var taskList = new TaskList();

// setup task listtaskList.on('add', function(task) { var taskView = new TaskView({model: task}); taskView.render(); taskView.$el.appendTo('#taskList');});

// setup add task formvar createTaskView = new CreateTaskView({ el: '#createForm', collection: taskList});

Page 115: Introduction for Browser Side MVC

github: https://github.com/tricknotes/task-list

demo: http://tasklist-demo.herokuapp.com/

Page 116: Introduction for Browser Side MVC

その他の Backbone.js の機能

Page 117: Introduction for Browser Side MVC

ブラウザサイド MVC での難しいところ

✓ URL✓ サーバとのデータ同期✓ 更新の反映のタイミング

Page 118: Introduction for Browser Side MVC

従来の MVC とは別の解決が必要な部分がある

Page 119: Introduction for Browser Side MVC

Backbone.js のアプローチ

Model

View

データと処理

表示の仕方イベントを受け付ける

イベント

DOM

Page 120: Introduction for Browser Side MVC

View

Model

HistoryView

Collection

Router

DOM

Sync

URL イベント

サーバ

Page 122: Introduction for Browser Side MVC

http://www.flickr.com/photos/hidekazufuruki/6881051786/sizes/h/in/photostream/

まずは使ってみる

Page 123: Introduction for Browser Side MVC

* MVC の背景 ✓ 画面の変更がしづらいことってありませんか?* MVC って何? ✓ アプリケーションを柔軟に保つための先人の知恵 ✓ 変化に対応するため、処理、入力、出力に分ける* ブラウザの中での MVC ✓ Backbone.js のアプローチについて

今日のまとめ

Page 124: Introduction for Browser Side MVC

tricknotes .talk .trigger(‘end’);

Page 125: Introduction for Browser Side MVC

more information...

Page 126: Introduction for Browser Side MVC

Backbone.js の参考情報

http://www.adventar.org/calendars/15

Page 128: Introduction for Browser Side MVC

Helping you select an MV* framework

IntroductionDevelopers these days are spoiled with choicewhen it comes to selecting an MV*framework for structuring and organizingtheir JavaScript web apps.

Backbone, Ember, AngularJS, Spine... the listof new and stable solutions continues togrow, but just how do you decide on which touse in a sea of so many options?

To help solve this problem, we createdTodoMVC - a project which offers the sameTodo application implemented using MV*concepts in most of the popular JavaScriptMV* frameworks of today.

TweetTweet 667

Our Stable Apps

Apps using RequireJS/AMD

Compare these to a non-framework implementation

* = App also demonstrates routing

What's new in 1.0.x Selecting a FrameworkOnce you've downloaded the latest releaseand played around with the apps, you'll wantto decide on a specific framework to try out.

Study the syntax required for defining models,views and (where applicable) controllers andclasses in the frameworks you're interested inand try your hand at editing the code to seehow it feels using it first-hand.

Please ensure that if you're happy with this,you do spend more time investigating theframework (including reading the official docs,the source and its complete feature list).There's often a lot more to a framework thanwhat we present in our examples.

Getting InvolvedIs there a bug we haven't fixed or an MV*framework you feel would benefit from beingincluded in TodoMVC?

If so, feel free to fork the repo, read ourcontribution guidelines, and submit a pullrequest — we'll be happy to review it forinclusion.

Make sure you use the template as a startingpoint and read the app specification.

Labs

Scroll down for 30+ more framework apps in Labs

Download (1.0.1)Download (1.0.1) View project on GitHubView project on GitHub

Backbone.js RR

Ember.js RR

AngularJS RR

Spine RR

KnockoutJS RR

Dojo RR

YUI RR

Batman.js RR

Closure RR

Agility.js RR

Knockback.js RR

GWT

Backbone.js + RequireJS RR

Ember.js + RequireJS RR

Vanilla JS

jQuery

RR

TodoMVC is an immensely valuable attempt at a difficult

problem - providing a structured way of comparing JS

libraries and frameworks. TodoMVC is a lone data point in a

sea of conjecture and opinion.

Justin Meyer

All main apps have been completelyrewritten for consistency

Routing has been added to many of these✔

We now have 30+ apps being worked onin Labs

We're using a kick-ass new template✔

Framework authors and contributors havebeen consulted to ensure our apps adhereto best practices

We're helping AMD users by adding AMDversions of many apps

Submit Pull Request »Submit Pull Request »

CanJS RR

http://addyosmani.github.com/todomvc/

Page 131: Introduction for Browser Side MVC

本日は概論まで

Page 132: Introduction for Browser Side MVC

あるのみ実践

Page 133: Introduction for Browser Side MVC

http://connpass.com/event/1368/

Sapporo.js - 2012.12.16

Backbone.js handson: @onjiro_mohyahya

Page 134: Introduction for Browser Side MVC

JavaScript 道場

超豪華講師JavaScript コーディング実践

練習!練習!練習!2013.02.23(土)@札幌市産業振興センター

Page 135: Introduction for Browser Side MVC

ここまではまだまだ概論なので、しっかりと実践して、その中から新しい学びを一緒に見つけて行き

ましょう!http://www.flickr.com/photos/8674051@N04/6380167887/