2012-11-13 4 views
2

그래서 나는 엠버 데이터 모델을 가지고 있으며, 사용자가 아이템마다 다른 DS.attr을 만들고 원하는 것을 불러 낼 수 있기를 바랍니다. 그러면 json이 mondodb를 사용하는 레일 서버로 전송됩니다. 그런 다음 키가 정의되어 있는지 확인하고이 문서에 대한 키를 생성하지 않고 mongo에 저장했는지 확인할 수 있습니다.엠버 데이터 다이내믹 DS.attr의 숫자

문제는 DS.Model을 확장 할 때 모든 DS.attr을 하드 코드해야하지만 그 시점에서 모두 알아 채지 못하는 것입니다.

DS.Model을 다시 열고 전달 된 json 키를 루프하는 방법이 있습니까? 아니면 allKeys 필드의 모든 키를 레일에서 클라이언트로 전달할 수 있습니까?).

누군가 다른 속성을 만들고 싶을 때 모델을 동적으로 다시 열고이 DS.attr을 추가 할 수 있습니까?

누구나 어떤 아이디어라도이 작업을 수행 할 수 있습니까?

모든 도움, 예제 또는 아이디어가 도움이 될 것입니다.

덕분에 당신이 App.Post 모델이 있고 사용자가 게시물에 대한 추가 속성을 저장하려는 가정이 많이 릭

답변

2

. 먼저 귀하의 모든 modelTypes을 모델 App.MyModelTypes을 생성하고 저장 :

App.MyModelTypes = DS.Model.extend({ 
    modelType: DS.attr('string') // e.g. App.Post, App.Comment 
    attributes: DS.hasMany('App.Attribute') 
}); 

를 그런 다음 App.Post 좋아한다 : 다음과 같이

App.Post = DS.Model.extend({ 
    title: DS.attr('string'), 
    body: DS.attr('string'), 
    // ... other base attributes 
}); 

는 모델 App.Attribute을 정의

App.Attribute = DS.Model.extend({ 
    name: DS.attr('string') 
    attrType: DS.attr('string'), 

    theModelType: DS.belongsTo('App.Model'), 
    attributeValues: DS.hasMany('App.AttributeValue') 
}); 

때 사용자를 게시물의 새 속성을 만들면 응용 프로그램은 App.MyModelType App.Post에 속하는 새 App.Attribute을 만들어야합니다.

마지막으로 사용자 지정이 게시물에 대한 값을 속성 저장하기위한 모델이 필요합니다

App.AttributeValue = DS.Model.extend({ 
    theModelType: DS.belongsTo('App.MyModelTypes'), 
    targetId: DS.attr('number'), 
    attribute: DS.belongsTo('App.Attribute'), 
    value: DS.attr('string') // attribute.attrType will give us the type 
}); 

사용자가 특정 게시물의 속성 값을 편집, 당신은 저장이 App.Post를 저장 theModelTypetargetIdpost.id,

그게 효과가 있는지 알려주세요.

+0

hhhmmm! 덕분에 Zack은 mongodb의 다른 컬렉션에있는 다른 문서에 저장하지 않으므로 다른 속성으로 속성을 분리하고 싶지 않습니다. 이것은 관계형 데이터베이스를 사용하는 방법 일 수 있지만 정확한 이유는 아닙니다. 다른 어떤 생각? 고마워. –