我想比较我的集合中的模型属性并将其存储到新模型中。
Collection:
Model1:
Apple: 1
Banana: 0
Orange: 0
Status: 1254869
Model2:
Apple: 0
Banana: 1
Orange: 1
Status: null
输出应为:
ModelResult:
Apple: 1
Banana: 1
Orange: 1
Status: 1254869
有什么想法吗?
我是手动做的
ModelResult = collection.at(0);
collection.each( function(model){
if(model.get("Apple") != 0){
ModelResult.set({Apple: model.get("Apple")});
}
if(model.get("Banana") != 0){
ModelResult.set({Apple: model.get("Banana")});
}
if(model.get("Orange") != 0){
ModelResult.set({Apple: model.get("Orange")});
}
if(model.get("Status") != ""){
ModelResult.set({Apple: model.get("Status")});
}
});
注意:
是否也可以消除0
上的null
或ModelResult
值?
谢谢。
答案 0 :(得分:1)
要取消0
和null
值,您可以使用the validate
function。它始终在调用set
或save
之前调用,如果valus与您想要的不匹配,则只返回错误消息,更改将不会生效。
这也意味着您的ModelResult
必须是一个单独的模型。
var ModelResult = Backbone.Model.extend({
...
validate: function(attrs) {
if (_.intersection([0, null], _.values(attrs))) {
return "Zeroes and nulls are ignored.";
}
},
...
});
现在你的每个功能都可能像
function(model) {
_.each(model.toJSON(), function(value, key) {
ModelResult.set(key, value);
});
}
现在它将遍历每个模型的每个属性,并将它们添加到ModelResult
,但过滤掉所有0
和null
。
希望这有帮助!