2013-08-27 2 views
1

Я использую coffeescript. Мой код очень прост:Backbone.js коллекция fetch 'this._byId' undefined

class SomeCollection extends Backbone.Collection 
    constructor: (@options) -> 
    url: -> 
    "#{$SCRIPT_ROOT}/some/data/#{@options.someId}" 
    model: SomeModel 

class SomeView extends Backbone.View 
    initialize: -> 
    myCollection = new SomeCollection() 
    myCollection.fetch 
     success: (coll, resp) -> 
     console.log coll 

JSON, который возвращается из URL моей коллекции именно:

[{"id": 1, "comments": "", "name": "images/exceptions/59.png"}]

Однако, прежде чем что-либо печатается на консоли, я получаю Backbone.js ошибка на строка 768: Невозможно прочитать свойство 1 of undefined. Неопределенный объект - this._byId в функции get коллекции. Как я могу решить эту проблему?

ответ

5

Вы распространяете Backbone.Collection и предоставляете свой собственный конструктор, поэтому вам нужно обязательно вызвать родительский конструктор.

constructor: (@options) -> 
    super null, @options 

Кроме того, стандартные аргументы для коллекции (models, options), так что я бы придерживаться этого.

constructor: (models, @options) -> 
    super models, @options 

Или еще лучше, использовать initialize вместо constructor, чтобы избежать этого целиком

initialize: (models, @options) -> 
+0

Бинго! Спасибо за ваше краткое, но полное объяснение. – Pakman

Смежные вопросы