带有backbone.js的fullCalendar会出错

时间:2014-03-06 21:55:44

标签: jquery backbone.js fullcalendar

我尝试用backbone.js实现fullCalendar,但是我收到了一个错误: 未捕获错误:必须传递bindAll函数名称

我正在关注这个有点旧的tutorial,所以可能已经过时但是在网上查看其他更近的例子,代码似乎是对的。 我假设我正在使用Rails应用程序,但我还没有连接数据库,我的数据是假的json文件。

所以这里是我的代码:

$(function() {
    var CalendarApp = Backbone.View.extend({
        el: $('#wrap'),

        initialize: function(){
            this.headerModel = new HeaderModel();
            this.headerView = new HeaderView({
                model: this.headerModel,
                el: $('header')
            });
            this.headerModel.fetch();

            this.eventsView = new EventsView({
                el: $("#calendarView"),
                collection: events
            }).render();

            this.events.fetch();
        }
    });

    var calendar = new CalendarApp;

});

EventsView.js(这里我收到了错误)

var EventsView = Backbone.View.extend({
    collection: events,

    initialize: function(){
        _.bindAll(this);

        this.collection.bind('reset', this.addAll);
    },

    render: function(){
        this.$el.fullCalendar({
            header: {
                    left: 'prev,next today',
                    center: 'title',
                    right: 'month,basicWeek,basicDay',
                    ignoreTimezone: false
                },
                selectable: true,
                selectHelper: true,
                editable: true
        });
    },

    addAll: function(){
        this.$el.fullCalendar ("addEventSource", this.collection.toJSON());
    }
});

EventsCollection:

var Events = Backbone.Collection.extend({
    model: Event,
    url: "events"
});

var events = new Events();

EventModel.js

var Event = Backbone.Model.extend();

我缺少什么?

1 个答案:

答案 0 :(得分:2)

bindAll是一个underscore.js方法。在骨干中,它通常用于将this绑定到类中定义的一堆方法。正如错误所说,你必须至少给它一个函数。

例如,如果您希望确保视图中的addAll - 方法访问正确的this,您可以像这样绑定它:

var EventsView = Backbone.View.extend({
    collection: events,

    initialize: function(){
        _.bindAll(this, 'addAll');

        this.collection.bind('reset', this.addAll);
    },

    // Render function removed to clarify

    addAll: function(){
        this.$el.fullCalendar ("addEventSource", this.collection.toJSON());
    }
});