2012-08-14 48 views
1

我想比较我的集合中的模型属性并将其存储到新模型中。比较骨架中的两个模型属性

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")}); 
    } 
}); 

注:

是否有可能也消除ModelResult0null值?

谢谢。

+1

你见过吗:http://stackoverflow.com/questions/171251/how-can-i-merge-properties-of-two-javascript-objects-dynamically – primavera133 2012-08-14 13:00:17

+0

你只是想比较一下,如果有东西存储或你想比较这些值吗? – 2012-08-14 13:20:56

回答

1

要消除0null值,您可以使用the validate function。它在setsave被调用之前总是被调用,并且如果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 S和null秒。

希望这会有所帮助!