2012-08-14 5 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")}); 
    } 
}); 

참고 :

그것은 또한 ModelResult0 또는 null 값을 제거 할 수 있습니까?

감사합니다.

+1

본 적이 있습니까? http://stackoverflow.com/questions/171251/how-can-i-merge-properties-of-two-javascript-objects-dynamically – primavera133

+0

무언가가 저장되어 있는지 비교하고 싶습니까? 값을 비교하고 싶습니까? –

답변

1

0null 값을 제거하려면 the validate function을 사용할 수 있습니다. set 또는 save이 호출되기 전에 항상 호출되며 valus가 원하는 것과 일치하지 않으면 오류 메시지 만 반환되고 변경 사항은 적용되지 않습니다.

이것은 또한 ModelResult이 별도의 모델이어야 함을 의미합니다.

function(model) { 
    _.each(model.toJSON(), function(value, key) { 
    ModelResult.set(key, value); 
    }); 
} 

지금 모두가 모든 모델의 모든 속성을 반복하고 ModelResult에 추가 있지만, 모든 0들과 null의를 필터링 것 같은

var ModelResult = Backbone.Model.extend({ 
    ... 
    validate: function(attrs) { 
    if (_.intersection([0, null], _.values(attrs))) { 
     return "Zeroes and nulls are ignored."; 
    } 
    }, 
    ... 
}); 

이제 각 기능이 될 수 있습니다.

희망이 도움이됩니다.

관련 문제