javascript - 为什么我的主干模型奇怪地嵌套在集合中,需要深入访问方法/属性?

标签 javascript backbone.js underscore.js

我有一个集合和一个模型,两者都使用属性/选项来增强它们的附加功能。这是模型(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"
});

关于javascript - 为什么我的主干模型奇怪地嵌套在集合中,需要深入访问方法/属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14130262/

相关文章:

javascript - 不带括号的多个 for 循环

javascript - BackboneJS + HandlebarsJS - 如何基于css添​​加图片

javascript - Backbone.js 在 View 中渲染集合

javascript - 如何混合下划线函数以使用 _.contains() 的自定义比较算法?

javascript - 刷新后检索子窗口引用

javascript - eslint 冗余 double 如何更改为有效

javascript - AMD 加载器是否需要一种方法来启动除 "define?"以外的模块解析

javascript - Jquery 文件上传和 Backbone 的上下文

javascript - 下划线绑定(bind) vs jQuery.proxy vs native 绑定(bind)

javascript - 使用下划线检查数组是否包含两个值之一