从 Backbone 集合创建对象,将模型值相互映射
Create object from Backbone collection that maps model values to one another
我们正在使用 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")
}
}
]
我们正在按照以下规定的方式收听对网格的编辑,出于这个问题的目的,我们可以忽略函数的模型参数,但专注于列(delete
、alias
或上面的 assignedServer
),它本身就是集合中的一个模型。到目前为止,我有一段代码利用 underscore.js 的 _.filter
,returns validatableColumns
,但我想更进一步,最终得到格式为 {name: validator, etc...}
。考虑到我的具体用例,从 Backbone 集合创建对象并将模型值相互映射的简洁方法是什么?
certificateGrid.listenTo(certificateCollection, "backgrid:edited", function (model, column) {
var validatableColumns = _.filter(column.collection.models, function (c) {
return c.get('validator');
});
//etc.
使用 _.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;
}, {});
我们正在使用 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")
}
}
]
我们正在按照以下规定的方式收听对网格的编辑,出于这个问题的目的,我们可以忽略函数的模型参数,但专注于列(delete
、alias
或上面的 assignedServer
),它本身就是集合中的一个模型。到目前为止,我有一段代码利用 underscore.js 的 _.filter
,returns validatableColumns
,但我想更进一步,最终得到格式为 {name: validator, etc...}
。考虑到我的具体用例,从 Backbone 集合创建对象并将模型值相互映射的简洁方法是什么?
certificateGrid.listenTo(certificateCollection, "backgrid:edited", function (model, column) {
var validatableColumns = _.filter(column.collection.models, function (c) {
return c.get('validator');
});
//etc.
使用 _.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;
}, {});