【问题标题】:Errors in building a BackboneJS Event Collection - new Event() throws errors构建 BackboneJS 事件集合时出错 - new Event() 抛出错误
【发布时间】:2011-12-04 17:49:33
【问题描述】:

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

$(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 库 v1.7.1
  • Backbone.js 0.5.3
  • 下划线.js 1.2.2
  • Chromium 14.0.835.202(开发者内部版本 103287 Linux)Ubuntu 11.10
  • Firefox 是 8.0,Ubuntu 11.10,64 位

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

【问题讨论】:

  • 您应该发布事件模型的代码,因为似乎错误发生在那里。

标签: javascript backbone.js backbone-events


【解决方案1】:

您的问题是您(和 Chris Storm)只是为您的模型选择了一个坏名字。 JavaScript 中已经有一个Event(至少在一个JavaScript 中是wired up to a DOM);此外,您不能调用new Event() 来创建DOM Event 对象,您应该使用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;
});

【讨论】:

  • 完美运行,非常感谢!我会在他的博客上发表评论,以防其他人遇到同样的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多