0

コレクションとモデルがあり、どちらも属性/オプションを使用して追加機能で拡張しています。モデル ( LoadRouteGroup ) は次のとおりです。

return Backbone.Model.extend({
    initialize: function () {
        console.log(this);
    },
    fetchf: function () {
        console.log("FETCH");
    }
});

コレクション ( LoadRouteGroups ):

return Backbone.Collection.extend({
    constructUrl: function(options) {
        if (options.groupingType === "facility") {
            // TODO: new endpoint: /api/v1/loadroutes?grouping=facility
            this.url = clawConfig.endpoints.webApiRootUrl + "/api/loads/facilities";
        }
        else {
            this.url = clawConfig.endpoints.webApiRootUrl + "/api/v1/loadroutes";
        }
    },
    initialize: function (models, options) {
        options || (options = {});

        this.constructUrl(options);

        console.log(this);
    }
});

それらは次のようにインスタンス化されます。

var loadRouteGroup = new LoadRouteGroup({
    entityType: "facility"
});

// WORKS
loadRouteGroup.fetchf();

// assign groupingType option to collection to denote which URL to use
var loadRouteGroups = new LoadRouteGroups({
    model: loadRouteGroup
}, {
    groupingType: "facility"
});

var firstGroup = loadRouteGroups.at(0);

// DOESN'T WORK
firstGroup.fetchf();

// WORKS
firstGroup.attributes.model.fetchf();

その呼び出しが機能することを期待していfirstGroup.fetchf()ます...しかし、そうではありません。firstGroup.attributes.model.fetchf()代わりに、メソッドにアクセスするために、奇妙にドリルダウンして使用する必要があります。

何が起きてる?これは私には簡単に思えますが、コレクションとモデルの関係のどこが悪いのか、一生わかりません。

4

2 に答える 2

1

インスタンス化するときではなく、コレクションを拡張するときにモデルを指定します。

于 2013-01-02T22:33:37.773 に答える
1

コレクション定義には、モデル タイプを含める必要があります。

return Backbone.Collection.extend({
    // ....
    model: LoadRouteGroup
});

コレクションを初期化するときは、モデルの配列を渡します。

var loadRouteGroup = new LoadRouteGroup({
    entityType: "facility"
});
var loadRouteGroups = new LoadRouteGroups([loadRouteGroup], {
    groupingType: "facility"
});
于 2013-01-02T22:34:11.700 に答える