Javascript 从主干集合创建对象,该集合将模型值映射到另一个模型值

Javascript 从主干集合创建对象,该集合将模型值映射到另一个模型值,javascript,backbone.js,underscore.js,backgrid,Javascript,Backbone.js,Underscore.js,Backgrid,我们正在使用Backgrid,它允许您使用Javascript对象数组定义网格列,并将其转换为集合。我们正试图利用这一点,在一列一列的基础上进行可配置的验证,因此,我们可能会在以下几列中添加一个“validator”函数: [ { label: "Delete", name: "delete", cell: "boolean" }, { label: "Alias", name: "alias

我们正在使用Backgrid,它允许您使用Javascript对象数组定义网格列,并将其转换为集合。我们正试图利用这一点,在一列一列的基础上进行可配置的验证,因此,我们可能会在以下几列中添加一个“validator”函数:

[
    {
        label: "Delete",
        name: "delete",
        cell: "boolean"
    },
    {
        label: "Alias",
        name: "alias",
        cell: "string",
        sortType: "toggle",
        validator: function (value) {
            return true;
        }
    },
    {
        label: "Assigned Server",
        name: "assignedServer",
        cell: "string",
        sortType: "toggle",
        validator: function (value) {
            return new Error("Cannot Assign Server")
        }
    }
]
我们正在按照以下规定的方式收听对网格的编辑,出于这个问题的目的,我们可以忽略函数的model参数,而将注意力集中在列(
delete
alias
assignedServer
)上,该列本身就是集合中的模型。到目前为止,我有一段代码利用了下划线.js的
..filter
,它返回
validatableColumns
,但我想更进一步,最后得到一个格式为
{name:validator,etc..}
的对象。记住我的特定用例,从主干集合创建对象(将模型值映射到另一个)的简洁方法是什么

certificateGrid.listenTo(certificateCollection, "backgrid:edited", function (model, column) {                    
    var validatableColumns = _.filter(column.collection.models, function (c) {
        return c.get('validator');
    });

    //etc.

使用
\uu0.reduce
似乎可以达到以下目的:

var validatorFns = _.reduce(column.collection.models, function (fns, model) {
    var validator = model.get('validator');
    if (model.get('validator')) {
        fns[model.get('name')] = validator;
    }
    return fns;
}, {});