-
Notifications
You must be signed in to change notification settings - Fork 3
04: Collectionの実装
Kazuhito Hokamura edited this page Oct 23, 2013
·
3 revisions
前回つくったApp
以下にSchedules
コレクションをつくります。このとき、Backbone.Collection.extend
の引数のmodel
プロパティにモデルクラスを指定します。
App.Schedule = Backbone.Model.extend({
//(略)...
});
App.Schedules = Backbone.Collection.extend({
model: App.Schedule
});
これでApp.Schedule
モデルクラスを子要素に持つコレクションクラスが定義されます。
モデルと同じように、コレクションもnew
でインスタンス化して利用します。(Modelの動作確認のコードは削除して構いません)
window.App = {};
$(function() {
var schedules = new Backbone.Collection();
});
add
メソッドでデータを追加することができます。追加されるデータはmodel
に設定したモデルによって初期化されます。
window.App = {};
$(function() {
var schedules = new App.Schedules();
schedules.add({
title: '打ち合わせ',
datetime: moment('2013-10-26 15:00')
}, { validate: true });
});
データを追加するとadd
イベントが発火し、追加されたモデルが渡されます。また、データの追加に失敗した場合(モデルのバリデーションが通らなかった場合など)はinvalid
イベントが発火します。
window.App = {};
$(function() {
var schedules = new App.Schedules();
schedules.on('add', function(model) {
var $p = $('<p>').html(
model.dateFormat('MM月DD日 HH時mm分') + ':' + model.get('title')
);
$('body').append($p);
});
schedules.on('invalid', function(model, message) {
alert(message);
});
schedules.add({
title: '打ち合わせ',
datetime: moment('2013-10-26 15:00')
}, { validate: true });
schedules.add({
title: '勉強会',
datetime: moment('2013-10-27 20:00')
}, { validat: true });
});
ブラウザで表示して予定が二件表示されれば成功です。