Marionette.jsまとめ その1 Application, Controller, AppRouter
Marionette.jsまとめ その2 View, ItemView, CollectionView
Marionette.jsまとめ その3 CompositeView, Layout, Region
Marionette.jsとは
Marionette.jsはBackbone.jsに下記等の機能を追加するライブラリです。
-
CollectionView
,ItemView
などViewタイプの追加 -
Region
とLayout
によるDOMの制御 - モジュール機構
- デストラクタ(elの削除、インスタンスの除去、オブザーバの解除)
- コントローラ
自分用に整理したいというのもあって
基本的な機能やAPIを数回に分けて列挙していきます。
使用しているMarionette.jsのバージョンは1.2.3です。
Marionette.Application
Marionette.jsアプリケーションの中核となるオブジェクトです。
このインスタンスをハブとして各オブジェクトを定義していきます。
var App = new Marionette.Application();
addRegions
Region
を追加します。
Region
は関連するDOM内のレンダリングやViewの破棄などを管理するオブジェクトです。
Application
や後述するLayout
の子要素として定義します。
App.addRegions({
'header': 'header',
'main': '#main',
'footer': 'footer'
});
App.header;
// => Marionette.Regionのインスタンス
addInitializer
アプリケーション初期化時のコールバックを追加します。
App.addInitializer(function() {
var router = new App.Route.Router();
});
Events
listenTo
やon
を使ってオブザーバを設定することができます。
またMarionette.jsのイベントは全てMarionette.triggerMethod
を介して行われ、
イベント発火時にそのオブジェクトにon + イベント名
のメソッドが定義されていれば実行します。
// どちらも初期化完了後に呼び出される
App.listenTo(App, 'initialize:after', function() {
Backbone.History.start();
});
App.onInitializeAfter = function() {
Backbone.History.start();
};
module
Marionette.Application
のインスタンス配下にモジュールを定義します。
App.module('Hoge', function(Hoge, App, Backbone, Marionette, $, _) {
Hoge.Fuga = Backbone.View.extend({
initialize: function() {
console.log('Foo');
}
});
});
var fugaView = new App.Hoge.Fuga();
// サブモジュールまでまとめて定義可能
App.module('blur.blur.blur');
start
Marionette.Application
の初期化処理を下記の順番で行います。
-
initialize:before
イベント発火 - addInitializerで登録した関数呼び出し、各モジュールの初期化処理
-
initialize:after
イベント発火 -
start
イベント発火
$(function() {
App.start();
});
Marionette.Controller
Backbone.jsには無かったコントローラです。
特に固有の機能はなく、定義されているメソッドは
triggerMethod
, extend
, close
とBackbone.Events
関連です。
var Controller = Marionette.Controller.extend({
initialize: function() {
this.todos = new App.Todo.Collection();
},
showLayouts: function() {
App.main.show(new App.Layout.HeaderView);
}
});
Marionette.AppRouter
Backbone.Router
を拡張したオブジェクトです。
appRoutes
ルーティングを設定します。
通常のBackbone.Router
と違い、
呼び出すのはcontroller
に指定したオブジェクトのメソッドです。
var Router = Marionette.AppRouter.extend({
appRoutes: {
'top': 'hoge',
'*splat': 'fuga'
}
});
var Controller = Marionette.Controller.extend({
hoge: function() {
//...
},
fuga: function() {
//...
}
});
App.addInitializer(function() {
router = new Router({
controller: new Controller()
});
});