ダウンロード
Backbone.js を下記URLからダウンロードします。
また Backbone.js は Underscore.js, jQuery に依存しますので合わせてダウンロードしましょう。
Backbone.js
Underscore.js
Backbone.js 1.0.0
Underscore.js 1.5.1
jQuery 1.8.2
を使用します。
ダウンロードしたら読み込みます。
html
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script> <script src="js/lib/underscore-min.js"></script> <script src="js/lib/backbone-min.js"></script> <script src="js/app.js"></script>
app.js はこれから作るアプリケーションのファイルなので新たに作成します。
下記のようにして jQuery を使用できるようにします。
app.js
(function($){
//ここにコードを書く
})(jQuery);
やること
準備ができたので早速使ってみましょう。
今回はjsonで取得したデータを、単純にリストで表示するということをやってみます。
Backbone.js は大きく別けると Model、Collection, View, Router の要素で構成されています。
Model はデータの取得や保存などを行います。Collection は Model の集合で、View ではDOMの操作やイベントの設定など行います。
今回は Router は使用しません。
Model
最初に Model を作成します。
app.js に下記を記述します。
app.js
var User = Backbone.Model.extend({
defaults: {
'name': '',
'age': 0
}
});
defaults に name, age を設定します。これは値がない時に設定される値です。
あと入力するアプリケーションでしたら validate を設定しますが、今回は表示するだけなので省略します。
Collection
続いて Collection です。
app.js
var Users = Backbone.Collection.extend({
model: User,
url: 'data.json'
});
model プロパティで User モデルに関連付けします。
今回はjsonデータを読み込みますので、urlに指定します。
data.json は下記の構造にします。
data.json
[
{
"name": "田中", "age": "10"
},
{
"name": "山田", "age": "16"
},
{
"name": "内田", "age": "32"
}
]
View
最後に View です。
app.js
var UserView = Backbone.View.extend({
el: $('#view'),
initialize: function(){
this.collection = new Users();
this.collection.fetch({
error: $.proxy(this.error, this),
success: $.proxy(this.render, this)
});
},
render: function(){
_(this.collection.models).each(function(item){
this.appendItem(item);
}, this);
},
appendItem: function(item){
var user = {
name: item.get('name'),
age: item.get('age')
};
$(this.el).append(this.template(user));
},
error: function() {
$(this.el).append(this.template({name: '取得できませんでした。'}));
},
template: _.template("<li><%= name %> <% if(typeof(age) != 'undefined'){ %>(<%= age %>)<% } %></li>")
});
var staffView = new UserView();
initialize はインスタンス作成時に実行される関数です。
collection.fetch で json を読み込み成功したら render を実行し append で要素を追加しています。
html に el で指定した要素を作成します。
html
<ul id="view"></ul>
とまあ、これくらいの規模だとただ冗長なだけな気がしますが、入力欄を作ってサーバーとやりとりがでてくるアプリケーションならメリットがあるのかなとか。
