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()才能访问该方法。

这里发生了什么?这对我来说似乎很简单,但我一生都无法弄清楚我的 Collection 和 Model 之间的关系出了什么问题。

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 回答