"Uncaught TypeError: undefined не является функцией", инициализируя сборку Backbone

У меня есть Backbone-коллекция примерно так:

var FooCollection = Backbone.Collection.extend({
    model:Foo,

    initialize: function (attributes, options) {
        this.barId = options.barId;
    }
});

var Foo = Backbone.Model.extend({});

Когда я пытаюсь инициализировать это, я получаю "Uncaught TypeError: undefined не является функцией" в _prepareModel() функции Backbone.Collection.

Плохой вызов находится в model = new this.model(attrs, options).

// Prepare a model or hash of attributes to be added to this collection.
_prepareModel: function(model, options) {
  options || (options = {});
  if (!(model instanceof Model)) {
    var attrs = model;
    options.collection = this;
    model = new this.model(attrs, options); // <-- BLOWS UP HERE
    if (!model._validate(model.attributes, options)) model = false;
  } else if (!model.collection) {
    model.collection = this;
  }
  return model;
},

Когда я перешагиваю через _prepareModel() в отладчике, он выглядит как тип this в этой точке child, а this.model, по сути, undefined.

Может ли кто-нибудь сказать мне, что я делаю неправильно?

Ответ 1

В моем фактическом коде Foo был объявлен после FooCollection. Не понял, что Javascript не поддерживает форвардные объявления. [headdesk]

Ответ 2

У меня была та же проблема. Моя проблема заключалась в том, что я включил мою модель script после Collection Script:

<script src="scripts/collections/Classes.js"></script>
<script src="scripts/models/Class.js"></script>

Чтобы исправить это, мне просто пришлось переместить класс .js выше Classes.js:

<script src="scripts/models/Class.js"></script>
<script src="scripts/collections/Classes.js"></script>

Приветствия