构建BackboneJS事件集合时出错 - 新的Event()抛出错误

时间:2011-12-04 17:49:33

标签: javascript backbone.js backbone-events

这似乎是一个集合的标准用法,但它不起作用。我在文档就绪函数中有以下代码:

$(function() {
  window.EventList = Backbone.Collection.extend({
    model: Event,
    url: '/events',
        parse: function(response) { // same result with or without parse function
      return _(response.rows).map(function(row) { return row.doc ;});
    }
  });         
  window.Events = new EventList;
  // throws Uncaught TypeError: Illegal constructor
  // Events.fetch();
});

我已经使用Chromium和Firefox进行了测试,FF更加冗长:

this.model is not a constructor at Backbone.js line:570
[Break On This Error] model = new this.model(attrs, {collection: this}); 

我错过了什么?

作为旁注,如果您需要更多上下文,我正在尝试关注Chris Storm's tutorial/chain

相关软件版本:

  • jQuery JavaScript Library v1.7.1
  • Backbone.js 0.5.3
  • Underscore.js 1.2.2
  • Chromium 14.0.835.202(Developer Build 103287 Linux)Ubuntu 11.10
  • Firefox是8.0,Ubuntu 11.10,64位

更新:多一点调试,我发现在抛出错误时,this.model的值为function Event() { [native code] },调用new Event()会引发更多错误 - TypeError。那么创建事件有什么问题呢?

1 个答案:

答案 0 :(得分:7)

你的问题是你(和Chris Storm)只为你的模特选择了一个坏名字。 JavaScript中已经存在Event(至少在wired up to a DOM的JavaScript中);此外,您无法调用new Event()来创建DOM事件对象,您应该使用document.createEvent('Event')

尝试将您的事件重命名为CalendarEvent:

$(function() {
  window.CalendarEvent     = Backbone.Model.extend({});
  window.CalendarEventList = Backbone.Collection.extend({
    model: CalendarEvent,
    url: '/events',
    parse: function(response) {
      return _(response.rows).map(function(row) { return row.doc ;});
    }
  });         
  window.CalendarEvents = new CalendarEventList;
});