2

URLだけが異なるBackboneでいくつかのコレクションを作成する必要があります。これが私のモデルです:

App.Models.Main = Backbone.Model.extend({});

これが私のコレクションです:

App.Collections.Mains = Backbone.Collection.extend({
        model: App.Models.Main,
        initialize: function() {
            this.fetch({
                success: function(data) {
                    //console.log(data.models);
                }
            });
        },
    url: this.url
});

私のルーターで、私は試しました:

mc = new App.Collections.Mains({ url: 'main-contact'});
mains = new App.Views.Mains({ collection: mc});
$('#web-leads').append(mains.el);

しかし、私はこのエラーを受け取ります:Error: A "url" property or function must be specified

URLをコレクションに渡すにはどうすればよいですか?

4

2 に答える 2

2

コンストラクターは次のBackbone.Collectionようになります。

Backbone.Collection = function(models, options) { ...

2番目の引数としてオプションを想定しています。最初の引数は、コレクションを初期化するためのモデルのリストです。

コレクションを次のように初期化する必要があります。

mc = new App.Collections.Mains(null, { url: 'main-contact'})

urlまた、コレクションを定義しているときに、プロパティを正しく設定していません。式this.urlは、モデルが初期化されるときではなく、モデルが定義されるときに評価されます。のコンテキストはthis、コレクションのインスタンスを指していませんが、モデルを定義するときのスコープを指している可能性がありwindowます。Javascriptを使用すると、に設定することができますが、そのようなプロパティがないwindow.urlため、に設定されます。windowundefined

それ以外の:

App.Collections.Mains = Backbone.Collection.extend({
   url: this.url
});

initialize次のメソッドでURLを設定する必要があります。

App.Collections.Mains = Backbone.Collection.extend({
    initialize: function(models, options) {
       if(options && options.url) {
           this.url = options.url;
       }   
    }
});
于 2013-01-08T16:55:45.990 に答える
0

これはうまくいくはずですが、少し醜いです:

 mc = new (App.Collections.Mains.extend({ url: 'main-contact'}));
 mains = new App.Views.Mains({ collection: mc});

基本的に、ベースコレクションを拡張し、新しいコレクションを呼び出します。アンラップは次のようになります。

MainContantCollection = App.Collections.Mains.extend({ url: 'main-contact'});
mc = new MainContactCollection();
mains = new App.Views.Mains({ collection: mc});
于 2013-01-08T17:01:11.293 に答える