Ошибка уничтожения реляционной модели Backbone, созданной с помощью Coffeescript

У меня есть ситуация, которая должна быть простой, чтобы решить, я думаю. Конечно, люди используют Backbone Relational с CoffeeScript...

Вот такая у меня модель:

class MyCompany.Models.Establishment extends Backbone.RelationalModel
  defaults:
    name: null

class MyCompany.Collections.EstablishmentsCollection extends Backbone.Collection
  model: MyCompany.Models.Establishment
  url: '/establishments'

Я еще даже не добавил никаких отношений, просто расширил RelationalModel. Теперь через консоль, когда я запускаю уничтожение экземпляра модели, он успешно уничтожает модель на сервере, но при завершении происходит сбой с трассировкой:

Uncaught TypeError: Object #<Establishment> has no method 'getCollection'
    _.extend.unregister
    Backbone.Events.trigger
    Backbone.RelationalModel.Backbone.Model.extend.trigger
    _.extend.destroy.options.success
    jQuery.extend._Deferred.deferred.resolveWith
    done
    jQuery.ajaxTransport.send.callback

Он умирает в строке 235 backbone-relational.js 0.4.0, потому что, я думаю, «это» — это модель, а не то, чем она должна быть, и у модели нет метода «getCollection».

Любые идеи, что я делаю неправильно, или я должен сообщить об ошибке? Для справки, здесь генерируется кофе Javascript:

(function() {
  var __hasProp = Object.prototype.hasOwnProperty, __extends = function(child, parent) {
    for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; }
    function ctor() { this.constructor = child; }
    ctor.prototype = parent.prototype;
    child.prototype = new ctor;
    child.__super__ = parent.prototype;
    return child;
  };
  MyCompany.Models.Establishment = (function() {
    __extends(Establishment, Backbone.RelationalModel);
    function Establishment() {
      Establishment.__super__.constructor.apply(this, arguments);
    }
    Establishment.prototype.defaults = {
      name: null
    };
    return Establishment;
  })();
  MyCompany.Collections.EstablishmentsCollection = (function() {
    __extends(EstablishmentsCollection, Backbone.Collection);
    function EstablishmentsCollection() {
      EstablishmentsCollection.__super__.constructor.apply(this, arguments);
    }
    EstablishmentsCollection.prototype.model = MyCompany.Models.Establishment;
    EstablishmentsCollection.prototype.url = '/establishments';
    return EstablishmentsCollection;
  })();
}).call(this);

person Tony    schedule 11.11.2011    source источник
comment
Какую команду вы используете для уничтожения модели из консоли?   -  person Trevor Burnham    schedule 14.11.2011


Ответы (1)


Вам необходимо обновить базовую версию Backbone.js. Вот почему:

Ваша ошибка возникает из-за того, что this имеет неправильное значение при вызове unregister. unregister вызывается в ответ на событие, связанное с register:

model.bind( 'destroy', this.unregister, this );

Этот третий аргумент устанавливает контекст. Но эта функция была добавлена ​​совсем недавно, в Backbone 0.5.2, как показывает журнал изменений.

person Trevor Burnham    schedule 14.11.2011
comment
Работаем над этим. Я только что обновился до 0.5.3, но это все еще происходит. Я пытаюсь отследить и убедиться, что все настроено правильно. - person Tony; 14.11.2011
comment
Мне нужно было очистить кеши Rails и перезапустить pow. Где-то мне подавали что-то старое. Кажется, сейчас работает. Спасибо, что выследил это для меня, Тревор. - person Tony; 14.11.2011