0

私はコードをもっている:

Application = function() {
    Application.prototype.currentQuote.collection.fetch();
};

Application.prototype = {}

Application.prototype.currentQuote = {};
Application.prototype.currentQuote.model = new (Backbone.Model.extend({
    defaults: {
        products: []
    }
}))();

Application.prototype.currentQuote.collection = new (Backbone.Collection.extend({
    model: Application.prototype.currentQuote.model,
    url: 'test.json'
}))();

App = new Application();

しかし、コレクションがフェッチされると、「Uncaught TypeError: オブジェクトは関数ではありません」というエラーが発生します。理由がわかりません。どうすれば修正できますか?

ここでテスト ケースを確認できます: https://dl.dropbox.com/u/15806777/development/bb/index.html

ありがとう!

4

2 に答える 2

3

あなたの問題はここにあると思います:

Application.prototype.currentQuote.collection = new (Backbone.Collection.extend({
    model: Application.prototype.currentQuote.model, // <------------------------
    url: 'test.json'
}))();

コレクションmodelは次のとおりです。

コレクションに含まれるモデル クラス。

そのため、は何か(つまり、モデル インスタンス)からではなく (つまり、"クラス")modelから来るものである必要があります。コレクションにいくつかのモデルを作成するように依頼する場合 (コンストラクター呼び出し、、、... )、コレクションには使用できるものが必要ですが、演算子にはコンストラクター関数が必要なため、使用できません。Backbone.Model.extend({...})new (Backbone.Model.extend({...}))fetchaddnewnew model_instancenew

このnew演算子は、ユーザー定義のオブジェクト型、またはコンストラクター関数を持つ組み込みオブジェクト型のいずれかのインスタンスを作成します。

それが、「Uncaught TypeError: object is not a function」エラーの原因です。

次のようなものが必要です。

Application.prototype.currentQuote.Model = Backbone.Model.extend({
    defaults: {
        products: []
    }
});
//...
Application.prototype.currentQuote.collection = new (Backbone.Collection.extend({
    model: Application.prototype.currentQuote.Model,
    url: 'test.json'
}))();
于 2012-07-07T16:47:01.950 に答える
2

このアーキテクチャは非常に独特です。何を達成しようとしているのかは明確ではありません。関数プロトタイプがどのように機能するかについて読んでおくことをお勧めします。しかし、おそらく、あなたは次のようなものを意図しています。

(function () {
  var CurrentQuote, CurrentQuoteSet;

  function Application() {
    this.collection = new CurrentQuoteSet;
    this.collection.fetch();
  };

  CurrentQuote = Backbone.Model.extend({
    defaults: {
      products: []
    }
  });

  CurrentQuoteSet = Backbone.Collection.extend({
    model: CurrentQuote,

    url: "test.json"
  });

  window.App = new Application;
})();
于 2012-07-07T13:19:34.480 に答える