2012-08-14 50 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秒。

希望這會有所幫助!