0

簡単に解決しなければならない状況があると思います。確かに、人々は 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

backbone-relational.js 0.4.0 の 235 行目で死んでいます。これは、本来あるべきモデルではなく「これ」がモデルであり、モデルに「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);
4

1 に答える 1

1

基になるBackbone.jsバージョンを更新する必要があります。理由は次のとおりです。

エラーは、が呼び出されたthisときに間違った値を持っていることが原因です。からバインドされたイベントに応答して呼び出されます:unregisterunregisterregister

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

その3番目の引数はコンテキストを設定します。ただし、変更ログに示されているように、この機能はBackbone0.5.2として最近追加されたものです。

于 2011-11-14T15:20:14.167 に答える