为什么我的主干模型奇怪地嵌套在集合中,需要钻取才能访问方法/属性?

Why are my Backbone Models nested strangely within a Collection, requiring drilling down to access methods/properties?

本文关键字:钻取 访问 属性 方法 模型 我的 集合 嵌套 为什么      更新时间:2023-09-26

我有一个集合和一个模型,两者都使用属性/选项来增加它们的额外功能。下面是模型(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之间的关系出了什么问题。

集合定义应该包括模型类型:

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

初始化集合时,传入一个模型数组:

var loadRouteGroup = new LoadRouteGroup({
    entityType: "facility"
});
var loadRouteGroups = new LoadRouteGroups([loadRouteGroup], {
    groupingType: "facility"
});

在扩展集合时指定模型,而不是在实例化时指定模型。