Ошибки при создании коллекции событий BackboneJS - new Event () выдает ошибки - PullRequest
3 голосов
/ 04 декабря 2011

Это похоже на стандартное использование коллекции, но это не работает.У меня есть следующий код внутри функции готовности документа:

$(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}); 

Чего мне не хватает?

Как идентификатор, я пытаюсь следовать учебному пособию / цепочке Криса Шторма , если вам нужно немного больше контекста.

Соответствующие версии программного обеспечения:

  • 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 бита

Обновление : немного больше отладки, и я обнаружил, что в тот момент, когда выдается ошибка, это.Модель имеет значение function Event() { [native code] }, а вызов new Event() выдает больше ошибок - TypeError.Так что не так с созданием событий?

1 Ответ

7 голосов
/ 04 декабря 2011

Ваша проблема в том, что вы (и Крис Сторм) просто выбрали дурное имя для вашей модели.Уже есть Событие в JavaScript (по крайней мере, в JavaScript, который подключен к 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;
});
...