-
Notifications
You must be signed in to change notification settings - Fork 3
11: カレンダーに予定を描画する
Kazuhito Hokamura edited this page Oct 25, 2013
·
5 revisions
render
メソッド内で予定を描画するようにします。collection.findByDate
で一日ごとの予定を取得してきて描画していきます。
App.CalendarView = Backbone.View.extend({
//...
render: function() {
var $caption = this.$('caption');
var $tbody = this.$('tbody');
var currentDay = this.current.clone().startOf('month').startOf('week');
var endDay = this.current.clone().endOf('month');
$tbody.empty();
$caption.text( this.current.format('YYYY年MM月') );
while (currentDay <= endDay) {
var $tr = $('<tr>').appendTo($tbody);
for (var i = 0; i < 7; i++) {
var $date = $('<div class="calendar-date">').text(currentDay.format('MM/DD'));
var $list = $('<ul class="calendar-list">');
var schedules = this.collection.findByDate(currentDay);
_.each(schedules, function(model) {
var text = model.dateFormat('HH:mm') + ' ' + model.get('title');
$('<li>').text(text).appendTo($list);
});
$('<td>').append($date, $list).appendTo($tr);
currentDay.add(1, 'day');
}
}
},
//...
});
これでダミーデータが描画されれば成功です。
add
イベント時にもrender
することでデータが追加されたときにも反映するようにします。
App.CalendarView = Backbone.View.extend({
initialize: function() {
this.current = moment();
this.render();
this.listenTo(this.collection, 'add', this.render);
},
//...
});
これで予定をつくったときに描画されれば成功です。
デバッグのため、何件かのデータを予め登録しておきます。
window.App = {};
$(function() {
var schedules = new App.Schedules();
schedules.add([
{ title: '打ち合わせ1', datetime: moment('2013-10-01 13:00') },
{ title: '打ち合わせ2', datetime: moment('2013-10-02 15:00') },
{ title: '打ち合わせ3', datetime: moment('2013-10-02 13:00') },
{ title: '打ち合わせ4', datetime: moment('2013-10-05 13:00') },
{ title: '打ち合わせ5', datetime: moment('2013-10-10 14:00') }
]);
//...
});