2014-12-23 4 views
1

는 코드는 다음과 같습니다 ModelB이 성공적으로 생성 된 경우에도 RelationalModel에 중첩 된 컬렉션을 처리하는 방법은 무엇입니까? 내가 모델의 복잡한 계층 구조를 만들 수 <a href="https://github.com/PaulUithol/Backbone-relational" rel="nofollow">Backbone-Relational</a>를 사용

var ModelA = Backbone.Model.extend({ 
    initialize: function() { 
     console.log('model a initialized!') 
    } 
}); 

var CollectionA = Backbone.Collection.extend({ 
    model: ModelA 
}); 

var ModelB = Backbone.RelationalModel.extend({ 
    relations: [{ 
     type: Backbone.HasMany, 
     key: 'Collection', 
     collectionType: CollectionA 
    }] 
}); 

var data = new ModelB({ 
    name: 'ModelB', 
    Collection: [{ 
     name: 'ModelA-1' 
    }, { 
     name: 'ModelA-2' 
    }] 
}); 

console.log(data.get('Collection').at(0) instanceof ModelA); // false 
console.log(data.get('Collection').at(0) instanceof ModelB); // true 
console.log(JSON.stringify(data.toJSON())); 
// {"name":"ModelB","Collection":[{"name":"ModelA-1","Collection":[]},{"name":"ModelA-2","Collection":[]}]} 

보시다시피

가, ModelAinitialize()가 호출되지 않습니다. 유형을 확인하면 콜렉션 안의 오브젝트가 ModelA이 아님을 증명합니다. 이 문제를 어떻게 해결할 수 있습니까?

답변

0

두 변경 필요 : ModelARelationalModel (뿐 아니라 표준을) 확인하고 ModelA 이런 그 relatedModel이라고 ModelB 알려주기 :

var ModelA = Backbone.RelationalModel.extend({ 
    initialize: function() { 
     console.log('model a initialized!') 
    } 
}); 
... 

var ModelB = Backbone.RelationalModel.extend({ 
    relations: [{ 
     type: Backbone.HasMany, 
     relatedModel: 'ModelA', 
     key: 'Collection', 
     collectionType: CollectionA 
    }] 
}); 

Demo합니다.

+0

감사합니다. raina! 당신의 대답은 나의 의심을 해결합니다! – heyun