2012-05-24 3 views
4

에 중첩 된 백본 관계형 모델을 직렬화 복원 :직렬화/다음 RelationalModel 모델을 감안할 때 JSON

var Server = Backbone.RelationalModel.extend({ 
    relations: [{ 
     type: Backbone.HasMany, 
     key: 'databases', 
     relatedModel: 'Database', 
     collectionType: 'DatabaseCollection', 
     includeInJSON: 'id' 
    }], 

    defaults: { 
     databases: [] 
    }, 
}); 

var Database = Backbone.RelationalModel.extend({}); 
var DatabaseCollection = Backbone.Collection.extend({ 
    model: Database 
}); 

그리고 이러한 개체 :

new Database({ 
    id: 1, 
    name: 'DB1' 
}); 

new Database({ 
    id: 2, 
    name: 'DB2' 
}); 

var s1 = new Server({ 
    id: 3, 
    name: 'S1', 
    databases: [1,2] 
}); 

하는 것이 무엇이 모델을 역 직렬화/직렬화 할 수있는 가장 쉬운/권장되는 방법 이 JSON 구조에 어떤 영향을 미칩니 까? :

{ 
    databases: [ 
     { id: 1, name: 'DB1' } 
     { id: 2, name: 'DB2' } 
    ], 

    servers: [ 
     { id: 3, name: 'S1', databases: [1, 2] }     
    ] 
} 

a는 단일 요청으로 서버로 보내거나 서버로부터 읽을 수 있습니다.

감사합니다.

답변

1

난 당신이 그냥 Example를 만든이 바이올린에 약간의 변화와 함께 예제를 사용하여 설명 된 JSON을 생산할 수 있었다.

디버거에 표시되는 경고와 설명 된 결과로 인해 이러한 변경이있었습니다. 희망이 도움이됩니다.

  1. Servers relatedModel 및 CollectionType이 해당 모델을 가리키면 데이터베이스 모델 및 DatabaseCollection 선언이 Server 이전으로 맨 위로 이동되었습니다.
  2. 문자열은 데이터베이스 및 DatabaseCollection에 대한 참조를 사용하는 대신 사용하는 relatedModel 및 collectionType를 들어
  3. 몇 가지 더 예 여기

  • 추가 ServerCollection라는 서버의 모음 당신이 결국 코드입니다 만든 , 나는 방금 두 개의 컬렉션을 하나로 결합하기 위해 평범한 오래된 백본 모델을 만들었습니다. toJSON을 호출하면 단일 JSON 객체가 서버로 전송됩니다.

    var Database = Backbone.RelationalModel.extend({}); 
    var DatabaseCollection = Backbone.Collection.extend({ 
        model: Database 
    }); 
    
    var Server = Backbone.RelationalModel.extend({ 
        relations: [{ 
         type: Backbone.HasMany, 
         key: 'databases', 
         relatedModel: Database, 
         collectionType: DatabaseCollection, 
         includeInJSON: 'id' 
        }], 
    
        defaults: { 
         databases: [] 
        } 
    }); 
    var ServerCollection = Backbone.Collection.extend({ 
        model: Server 
    }); 
    
    var allDatabases = new DatabaseCollection(); 
    allDatabases.add([ 
        new Database({ id: 1, name: 'DB1' }), 
        new Database({ id: 2, name: 'DB2' }), 
        new Database({ id: 3, name: 'DB3' }), 
        new Database({ id: 4, name: 'DB4' }) 
    ]); 
    
    var allServers = new ServerCollection(); 
    allServers.add([ 
        new Server({ 
         id: 30, 
         name: 'S1', 
         databases: [ 
          allDatabases.get(1), 
          allDatabases.get(2) 
         ] 
        }), 
        new Server({ 
         id: 40, 
         name: 'S2', 
         databases: [ 
          allDatabases.get(3), 
          allDatabases.get(4) 
         ] 
        }) 
    ]); 
    
    // combine into an object to transfer to server as one 
    var serverObject = new Backbone.Model({ 
        'servers': allServers, 
        'databases': allDatabases 
    }); 
    console.log(serverObject.toJSON());