2016-10-12 2 views
0

세 개의 계단식 드롭 다운 목록을 만들려고합니다. 첫 번째는 프로젝트를 제한하고 두 번째는 선택한 프로젝트의 작업을 포함하고 두 번째는 선택된 작업의 마지막 사이트를 포함합니다.백본 관계형을 사용하여 중첩 구조 만들기

Backbone-Relational 플러그인을 사용하고 싶지만 적절한 관계를 생성하기가 어렵습니다. 이 플러그인으로 처음입니다.

코드 지금까지 :

App.Models.ProjectItem = Backbone.RelationalModel.extend({ 
    default: { 
     id: 0, 
     name: '' 
    }, 
    relations: [{ 
     type: Backbone.HasMany, 
     key: 'tasks', 
     relatedModel: App.Models.TaskItem, 
     //includeInJSON: Backbone.Model.prototype.idAttribute, 
     collectionType: App.Collections.TasksCollection, 
     reverseRelation: { 
      key: 'projectId', 
      //includeInJSON: Backbone.Model.prototype.idAttribute, 
      type: Backbone.HasOne 
     } 
    }] 
}); 

App.Collections.ProjectsCollection = Backbone.Collection.extend({ 
    model: App.Models.ProjectItem 
}); 

App.Models.TaskItem = Backbone.RelationalModel.extend({ 
    default: { 
     id: 0, 
     name: '' 
    }, 
    relations: [{ 
     type: Backbone.HasMany, 
     key: 'sites', 
     relatedModel: App.Models.SiteItem, 
     includeInJSON: Backbone.Model.prototype.idAttribute, 
     collectionType: App.Collections.SitesCollection, 
     reverseRelation: { 
      key: 'taskId', 
      //includeInJSON: Backbone.Model.prototype.idAttribute, 
      type: Backbone.HasOne 
     } 
    }] 
}); 

App.Collections.TasksCollection = Backbone.Collection.extend({ 
    model: App.Models.TaskItem 
}); 

App.Models.SiteItem = Backbone.RelationalModel.extend({ 
    default: { 
     id: 0, 
     name: '' 
    } 
}); 

App.Collections.SitesCollection = Backbone.Collection.extend({ 
    model: App.Models.SiteItem 
}); 

단일 프로젝트 만들기 :

var item = new App.Models.ProjectItem({ 
    id: 1, 
    name: 'project', 
    tasks: [ 
    { 
     id: 1, 
     name: 'task', 
     sites: [ 
     { 
      id: 1, 
      name: 'site' 
     } 
     ] 
    } 
    ] 
}) 

JSON으로 직렬화이 객체는 다음과 같습니다

"{"id":1,"name":"task","tasks":[1],"sites":[{"id":1,"name":"site"}],"projectId":null}" 

내 질문 :

1) 이유는 사이트 배열이 작업에 중첩되어 있지 않습니까?

2) 사이트 모음은 작업과 동일한 방식으로 일련 화되지 않습니다. 사이트 모델에도 관계를 만들어야합니까?

3) root 용으로 projectId가 반환되는 이유는 무엇입니까?

답변

0

여러 시간의 시행 착오 끝에 나는 마침내 그것을 얻었다. 순서 문제 .. 작업 코드 :

App.Models.SiteItem = Backbone.RelationalModel.extend({ 
    default: { 
     siteId: 0, 
     name: '' 
    } 
}); 

App.Collections.SitesCollection = Backbone.Collection.extend({ 
    model: App.Models.SiteItem 
}); 

App.Models.TaskItem = Backbone.RelationalModel.extend({ 
    default: { 
     taskId: 0, 
     name: '' 
    }, 
    relations: [{ 
     type: Backbone.HasMany, 
     key: 'sites', 
     relatedModel: App.Models.SiteItem, 
     //includeInJSON: Backbone.Model.prototype.idAttribute, 
     collectionType: App.Collections.SitesCollection, 
     reverseRelation: { 
      key: 'task', 
      includeInJSON: 'taskId', 
      type: Backbone.HasOne 
     } 
    }] 
}); 

App.Collections.TasksCollection = Backbone.Collection.extend({ 
    model: App.Models.TaskItem 
}); 

App.Models.ProjectItem = Backbone.RelationalModel.extend({ 
    default: { 
     projectId: 0, 
     name: '' 
    }, 
    relations: [{ 
     type: Backbone.HasMany, 
     key: 'tasks', 
     relatedModel: App.Models.TaskItem, 
     // includeInJSON: 'taskId', 
     collectionType: App.Collections.TasksCollection, 
     reverseRelation: { 
      key: 'project', 
      includeInJSON: 'projectId', 
      type: Backbone.HasOne 
     } 
    }] 
}); 

App.Collections.ProjectsCollection = Backbone.Collection.extend({ 
    model: App.Models.ProjectItem 
}); 

샘플 데이터의 경우 :

var item = new App.Models.ProjectItem({ 
    projectId: 2, 
    name: 'first', 
    tasks: [ 
    { 
     taskId: 1, 
     name: 'task', 
     sites:[{siteId:1, name: 'site'}] 
    } 
    ] 
}); 

나는이 JSON 문자열을 가지고 :

"{"projectId":2,"name":"first","tasks":[{"taskId":1,"name":"task","sites":[{"siteId":1,"name":"site","task":1}],"project":2}]}"