Backbone.jsはじめてみました3
ここ見ながらやってみた。http://arturadib.com/hello-backbonejs/docs/3.html
by FiNGAHOLiC
HTML
<script src="http://documentcloud.github.com/underscore/underscore-min.js"></script>
<script src="http://documentcloud.github.com/backbone/backbone-min.js"></script>
<script src="http://ajax.cdnjs.com/ajax/libs/json2/20110223/json2.js"></script>
<script src="https://getfirebug.com/firebug-lite-debug.js"></script>
JavaScript
(function($, window, document, undefined){
// モデル(一般的にキー、バリューのペアからなるJavaScriptオブジェクト)
var Item = Backbone.Model.extend({
// デフォルト
defaults : {
part1 : 'hello',
part2 : 'world'
}
});
// コレクション(一般的にモデルオブジェクトの配列)
var List = Backbone.Collection.extend({
model : Item
});
// メインアプリケーションビュー
var ListView = Backbone.View.extend({
// body要素をelプロパティにアタッチする
el : 'body',
// ビュー内でのイベントを監視、実行
events : {
'click button#add' : 'addItem'
},
// インスタンス生成時に呼ばれる初期化メソッド
initialize : function(){
// 指定された関数内でのthisを束縛する
_.bindAll(this, 'render', 'addItem', 'appendItem');
// コレクションのインスタンスを生成
this.collection = new List();
// オブザーバーの定義(コレクションにaddイベントを登録)
this.collection.bind('add', this.appendItem);
// 追加したアイテムの数を格納
this.counter = 0;
// render関数を起動(自動でrender関数が呼ばれるわけではないので)
this.render();
},
// ビュー内でのレンダリングを担当するメソッド(ユーザーによって手動で呼び出す必要がある)
render : function(){
$(this.el).append('<button id="add">Add list item</button>');
$(this.el).append('<ul></ul>');
// コレクションに格納されているモデルを書きだす
_(this.collection.models).each(function(item){
this.appendItem(item);
}, this);
},
// 上記のクリックイベントによって叩かれるカスタム関数
addItem : function(){
// カウンターをインクリメント
this.counter++;
// 新規モデルインスタンスを生成
var item = new Item();
// インスタンスのプロパティをセット(デフォルトを変更)
item.set({
part2 : item.get('part2') + this.counter
});
...