11

次のようなバックボーン コレクションがあります。

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

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

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

これを初期化しようとすると、 の_prepareModel()関数で「Uncaught TypeError: undefined is not a function」が発生します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()のタイプは のように見えますが、実際には未定義です。thischildthis.model

誰が私が間違っているのか教えてもらえますか?

4

2 に答える 2

18

私の実際のコードFooでは、後に宣言されましたFooCollection。Javascript が前方宣言をサポートしていないことに気付きませんでした。【ヘッドデスク】

于 2013-01-04T19:00:47.230 に答える
1

私は同じ問題を経験していました。私の問題は、コレクション スクリプトの後にモデル スクリプトを含めたことです。

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

それを修正するには、Classes.js の上に Class.js を移動する必要がありました。

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

乾杯

于 2015-03-03T23:54:35.880 に答える