SlideShare a Scribd company logo
Introduction to
Backbone.Marionette
ryuma tsukano
jsCafe14
Marionetteとは?
Backbone.jsの上に被せたlibrary
1. moduleを役割に応じて綺麗に整理
2. 決まった処理の記述を事前に埋込み
なぜMarionette?
Backboneを実際書いてみると色々悩む
● ①自由度が高過ぎ
○ Viewの親子や配置等、人によってバラバラで大変
● ②用意されたmoduleだけでは足りない
○ 特にViewやRouterが汚れる
● ③同じsourceばかり膨大な量を書くハメに...
=>これらを解決するためにMarionette
Marionetteの良い所
● ①Viewの構成が整理されて分かり易くなる
○ Layout管理(Viewの配置)の仕組みがある
○ どのView使うかでViewの親子階層が明確に
● ②開発作業の効率化
○ とにかく書く量が半分以下に激減!
○ 量が少ないので、読むのも楽になる!
● ③ソースが汚れない
○ routerとController分けてる!
○ イベント連携の仕組みが整理されてる!
噂:抽象度
噂「抽象度が高すぎなんじゃない?」
=> そんなに言う程ではない。simpleだし。
● 見えないcode = 今迄何度も書いてた所
○ 何度も同じ事書きたくないじゃん
○ 不明点はMarionetteのsource読めば良い
■ sourceは量が少なく、Backboneっぽいので、 すぐ
辿れる
抽象度:補足
補足すると、Marionetteは
“my way or highway?”なframework。
○ ※ Developing Backbone.js Applications より
● 気に入らない所は使わなくてもいい
○ 厳密に全てを使わなくても大丈夫
○ 一部、生Backbone/生jsを書いてもいい
噂:学習コスト
噂「学習コストかかるからあかんやろ」
=>勿論、0では無いがそこまで大変でない
● Backboneの延長として+αしただけ
○ simpleでそんなに独自ではない。
○ 殆ど、Backboneにextendしてる
学習コストの補足
結局、生のBackboneだけを使ってても
● ゆくゆく共通化するような事
● (暗黙的/明示的に)現場でルール化する事
=>これらを準備してくれるのがMarionette
Marionetteの学習=
現場で同等の独自の仕組み勉強するのと同じ
事例等
● 海外venture系で実験的に使い始めてる?
○ from 公式wiki事例集
○ 有名な物は無いが...
● 今年(‘13)7月のBackbone confでも言及有り
○ (1つ目/2つ目)
githubのstar数
ここのサイトでは
Backboneplugin中
一番start多いのが
=>Marionette
※ちなみに2位のchaplinも
同じ様なframework
情報源
● 入門
○ github:Developing Backbone.js Applications
○ slide: Backbone経緯 / 概念の解説 / 概説
○ blog : viewを図示した良記事
● リファレンス
○ github: 公式document / 公式wiki
● tutorial
○ blog : 1,2 / video : 1 / 書籍 : 1
● example
○ todoMVC / 本棚アプリ?のソース / mailer?
● Marionette自体のboilerplate系
○ github : boilerplate / yeomanのgenerator
boilerplate系
以下、すぐに始められる!素晴らしい!
● marionetteのboilerplate
● yeomanのgenerator
○ 特に後者が素晴らしい。以下の構成がすぐ出来る!
■ Back) Node + Express + Socket.io
■ Storage) Mongoose(mongoDB)
■ Front) Backbone + Marionette + requirejs +
Handlebars + SASS-bootstrap
■ Test) phntomjs + Mocha + Chai + Sinon
○ railsみたいな感覚でいきなり開発出来る!
■ 各種generatorも沢山あってかなり助かる!
ソースはこんな感じ
● render書かない
○ modelとのmappingも書かない
○ template呼び出し/cacheも書かない
=>量少ないのでパッと見も明快。
=>あくまでBackboneっぽく書いてる。
今から
個別のcomponentの説明をしていきます。
★おすすめ
=>本体のソースを見ながら聞くと、
  ある程度納得しながら進めれるかも。
● 正直に書かれたBackboneのソースなので、割と平易
に読めるかと。
=>本体は[ こちら ]から
Marionetteの全体像
MarionetteがBackboneに追加した事は3つ
● 1)View
● 2)Router
● 3)全体連携
※量的にも内容的にも1のViewがmain。
後はおまけ
1)viewのまとめ
● A)Viewを拡張
○ View
○ ItemView
● B)Viewの集合
○ CollectionItem
○ CompositeItem
● C)レイアウトを管理
○ Region
○ Layout
1)View
A)Viewを拡張
Viewの継承関係
=>先祖になるViewの話から
Backbone.View
Marionette.View
Marionette.ItemView Marionette.CollectionView
Marionette.CompositeView
Viewの最小単位
ItemViewの集合
ItemViewの集合(template付き)
Marionette.View
Marionette全ViewのBase(extend元super class)
(Backbone.Viewをextendしていて、内容は主に以下を追加)
● closeメソッド
○ eventのunbind/el削除等
○ 通常View自体の参照外してもGC対象にならない。
Event等unbindする必要有り=>それやってくれる
● ui
○ よく使うjQuery要素を書いておける仕組み
● templateHelper
○ templateから呼び出せる関数(次のpageで詳細)
※このViewを直接使う事はほぼ無い
Viewのtemplatehelper
templateHelper : templateから呼べるfunction
例)公式docより
これを
view.render()すると、
“I think that
Backbone.Marionette
is the coolest”
と表示される
Marionette.ItemView
Model(Collection)と結びつく1つのview
先程のViewをextendして主に以下を追加
● renderメソッド定義されてる
○ Model(Collection)を.toJSONでserialize
○ templateを生成(underscore)
○ Renderオブジェクトにtemplateを入れて描写
○ Marionette本体のソースを読むとよく分かる
○ =>render定義されてるので、自分で書く必要無い
● modelEvents/collectionEvents
○ model/collectionのeventをキャッチする
○ 例)modelEvents : { “change” : “method”}
■ view指定のmodelがchangeしたらmethod実行
ItemViewのソース
こんな感じ=>renderの定義とか自分で書かない
1)View
B)Viewの集合
ulタグ(=CollectionView)
Viewの集合?
BackboneのModelの集合=>Collection
同じように、Viewの集合を作ろうという話
例)
● liタグの1つ
○ さっきのItemView
● ulタグで囲う
○ CollectionView <=これ。
liタグ(=ItemView)
liタグ(=ItemView)
liタグ(=ItemView)
Marionette.CollectionView
ItemViewを束ねるView
● collectionの追加削除Eventもcheck
○ Eventひっかかった際の処理も定義済み
■ 追加削除:ItemViewを追加削除renderする
■ reset時:再度renderする
● 同じくrenderも定義済み
○ 指定したcollectionでloopしてItemViewをrender
○ renderしたものはelに格納。これもソース見よう
● Backbone.BabySitterを使ってItemView管理
○ 柔軟に呼び出せる
○ 例)myCollView.children.findByModel(MyModel)
CollectionViewのソース
こんな感じ
=>基本はitemViewを指定するだけ
Marionette.CompositeView
CollectionViewを継承して以下を追加
● templateを指定できる
○ ItemViewを囲うための親側のtemplateを作れる
○ appendHtmlメソッド上書きすると追加する場所や内容を
自分で書ける
● render
○ 再帰的にrender出来る
○ explorerのようなTree状のview作れる=>例
ソース例
tableをcompositeで書いた例
http://lostechies.com/derickbailey/2012/04/05/composite-views-tree-structures-tables-and-more/
Username FullName
taro yamada taro
hanako tanaka hanako
違い
CollectionViewとCompositeViewの違い
=>ItemViewの包み方
● CollectionView
○ 単純にtagで囲うLV
○ 単純に1階層のItemViewのrenderするだけ
● CompositeView
○ 親側にtemplate指定できる
■ その中に子供のtemplate埋め込める
○ 再起的に子孫のviewのrenderを実行できる
実際の所
● CopositeViewを使う方が多いかも
○ そんなに単純なViewにならないから
○ template有った方が柔軟
● それでも、使える所は出来るだけ
CollectionView使った方が良い
○ 「あたし、単純なんですー!」って言われると、ソース読
み易いから
Viewの継承関係もう一度
Backbone.View
Marionette.View
Marionette.ItemView Marionette.CollectionView
Marionette.CompositeView
Viewの最小単位
ItemViewの集合
ItemViewの集合(template付き)
1)View
C)レイアウトを管理
Layoutの親子関係
Layout
Region
CollectionView CompositeViewItemView
※Regionの中に
子供のLayout入る事がある
LayoutとRegionの関係
使い方の例
● Layout > Region > View
Region
Viewの表示非表示等の管理
● 表示/非表示
○ Region.show(view)で表示(renderを実行)
○ Region.close()で非表示
● 再表示管理
○ 再表示時、前の子供のview全部closeさせる
ソースsample
show/close書く
● elごちゃごちゃ書かない
○ なぜ書かなくて済むか?
■ =>次のpageのLayout等で場所を指定する
Layout
Regionの集合
● regionsフィールドでregionを登録
○ regions: { Region名: html要素 }
○ 例)regions: { menu: “#side” }
■ id=sideなhtml要素をmenuというRegionで登録
■ ここでshowするとid=sideにviewのelを描写
○ 後でaddRegionで追加も出来る
● 実はItemViewをextendしてる
○ ItemViewのようにtemplate指定可能
○ ItemViewのようにLayout自体をshowできる
○ 例)MyApp.mainRegion.show(new ChildLayout())
Layoutソース
● id=menuの要素にmenuというRegion登録
● menuにMenuViewを表示する
実際のLayout
● 幾つか見るとLayoutそんなに使われてない?
○ =>後述のApplicationがRegion管理も出来る
● 使い分け
○ 基本
■ Application > Region > View
○ 画面がいっぱい
■ 個別にLayout > Region > View
2)Router
AppRouter
Backbone.routerをextend
● appRoutesにBackboneのroutes書く
○ 書式はBackboneのroutesと一緒
○ 実行する関数=Controllerの関数
○ router内の関数ではない
● controller属性にcontrollerを指定
○ controllerは、ただのobject
Controller
こんな感じ
3)全体の連携
3)全体の連携
● 1)Application
● 2)イベントの話
○ A)command
○ B)Request/response
○ C)Event
Marionette.Application
アプリのhub。初期化や調整等。
初期化処理=>アプリ開始
● addInitializer(function(){ … })
○ 初期化処理。例えば...
■ AppRouterのnew、history.startとか実行
■ 初期画面作成処理
● start
○ configを元にアプリを開始
Application
こんな感じ
Component同士の通信
以下、3種類あり
● Commands
○ 戻り値なし
● Request/Response
○ 戻り値あり
● Event
○ 元々Marionetteに埋め込まれているEventと連携
=>これがApplicationの中に埋め込まれてる
● ※実体はBackbone.wreqrというplugin
Commands
● 一カ所の処理を実行するだけ
○ ※呼び出しはどこからでも書ける
● 戻り値は無い
Request/Response
● 別のcomponentから情報取得する時使う
○ 戻り値が有る
=>これで”RESPONSE HIT”が返って来る
Events
● Backbone.Eventsをextend
○ 何かが起こった事を伝える時便利
○ 複数の処理を実行したい時に便利
まとめ
良い所
● ①Viewの構成が整理=>分かり易くなる
● ②開発作業の効率化
● ③ソースが汚れない
コンポーネント
● View
○ ItemView/CollectionView/CompositeView
● Region/Layout
● AppRouter/Controller
● Application
○ Command/Request,Response/Event
おしまい

More Related Content

PDF
公式page改ざんで学ぶjQuery入門 (jscafe7)
PDF
実践Backbone.Marionette 現場の悩みと解決まで
PPT
20130924 Picomon CRH勉強会
PDF
はじめよう Backbone.js
PDF
20110714 j queryベーシック
PDF
Angular js or_backbonejs
PDF
WebGL and Three.js
PPTX
忙しい人のためのBackbone.jsとAngular.js入門
公式page改ざんで学ぶjQuery入門 (jscafe7)
実践Backbone.Marionette 現場の悩みと解決まで
20130924 Picomon CRH勉強会
はじめよう Backbone.js
20110714 j queryベーシック
Angular js or_backbonejs
WebGL and Three.js
忙しい人のためのBackbone.jsとAngular.js入門

What's hot (20)

PDF
Backbonejs @BuildInsiderOffline #1
PDF
最低限知っておきたい Webセキュリティーについて@MT関西
PDF
Backbone.js入門
PDF
JavaScriptことはじめ
PDF
Backbone.js
PDF
メディア芸術基礎 II jQuery入門
PDF
画像を縮小するお話
PDF
backbone.jsの使用例 その1
KEY
Kawaz的jQuery入門
PDF
5分でわかる?Backbone.js ことはじめ
PDF
Start React with Browserify
PDF
iPhoneアプリ開発入門(1)ボタンと画像
PDF
覚醒!JavaScript
PDF
株式会社インタースペース 清水様 登壇資料
PDF
Creators'night#12今井
PDF
よこへな3 15発表資料 最近ViewController をどんな感じで書いているか
PDF
情報編集(Web) HTML5 実践1 Canvas + Javascriptで図形を描く
PDF
WordPressと外部APIとの連携
PPTX
2時間で学ぶjQuery
PDF
WordPressで提供するWeb API
Backbonejs @BuildInsiderOffline #1
最低限知っておきたい Webセキュリティーについて@MT関西
Backbone.js入門
JavaScriptことはじめ
Backbone.js
メディア芸術基礎 II jQuery入門
画像を縮小するお話
backbone.jsの使用例 その1
Kawaz的jQuery入門
5分でわかる?Backbone.js ことはじめ
Start React with Browserify
iPhoneアプリ開発入門(1)ボタンと画像
覚醒!JavaScript
株式会社インタースペース 清水様 登壇資料
Creators'night#12今井
よこへな3 15発表資料 最近ViewController をどんな感じで書いているか
情報編集(Web) HTML5 実践1 Canvas + Javascriptで図形を描く
WordPressと外部APIとの連携
2時間で学ぶjQuery
WordPressで提供するWeb API
Ad

Viewers also liked (20)

PDF
Marionette: the Backbone framework
PDF
最強オブジェクト指向言語 JavaScript 再入門!
PDF
作って分かるKnockoutJS@ALM11月
PDF
Backbone model collection (jscafe 8)
PDF
Sass introduction (jscafe 10)
PDF
Чик чик и в продакшн: быстрый обзор маленьких библиотек для большого Backbone...
PPTX
Backgrid - A Backbone Plugin
PDF
JavaScript: Past, Present, Future
PDF
Workshop 7: Single Page Applications
PDF
AngularJS vs. Ember.js vs. Backbone.js
PPTX
Backbone And Marionette : Take Over The World
PDF
Introduction à Marionette
PDF
Intro to Backbone.js by Azat Mardanov for General Assembly
PPT
Backbone.js
PDF
Introduction to Backbone.js
PDF
Introduction to Backbone.js
PPTX
MVC & backbone.js
KEY
Beautiful Maintainable ModularJavascript Codebase with RequireJS - HelsinkiJ...
PPTX
Single page application and Framework
PPTX
Backbone/Marionette recap [2015]
Marionette: the Backbone framework
最強オブジェクト指向言語 JavaScript 再入門!
作って分かるKnockoutJS@ALM11月
Backbone model collection (jscafe 8)
Sass introduction (jscafe 10)
Чик чик и в продакшн: быстрый обзор маленьких библиотек для большого Backbone...
Backgrid - A Backbone Plugin
JavaScript: Past, Present, Future
Workshop 7: Single Page Applications
AngularJS vs. Ember.js vs. Backbone.js
Backbone And Marionette : Take Over The World
Introduction à Marionette
Intro to Backbone.js by Azat Mardanov for General Assembly
Backbone.js
Introduction to Backbone.js
Introduction to Backbone.js
MVC & backbone.js
Beautiful Maintainable ModularJavascript Codebase with RequireJS - HelsinkiJ...
Single page application and Framework
Backbone/Marionette recap [2015]
Ad

Similar to introduction to Marionette.js (jscafe14) (7)

PPTX
Marionettejs getting started
PDF
Study Intro Backbone
PDF
第3回Rest勉強会 marionette編
PDF
Parse.comと始めるBackbone.js入門(jscafe7)
PDF
Objective Front-End JavaScript
PDF
Spine入門
PDF
いまさら聞けない!?Backbone.js 超入門
Marionettejs getting started
Study Intro Backbone
第3回Rest勉強会 marionette編
Parse.comと始めるBackbone.js入門(jscafe7)
Objective Front-End JavaScript
Spine入門
いまさら聞けない!?Backbone.js 超入門

introduction to Marionette.js (jscafe14)