2016-10-12 13 views
0

3つのカスケード・ドロップダウン・リストを作成しようとしています。最初はプロジェクトを制約し、2番目のプロジェクトには選択したプロジェクトのタスクが含まれ、最後の1つのサイトには選択したタスクが含まれます。バックボーン・リレーショナルでネストされた構造を作成する

私はバックボーン・リレーショナル・プラグインを使用したいが、適切な関係を作成するのは難しい。このプラグインで初めてのことです。

コードこれまで:

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 
}); 

:.. 作業するコードの順序が重要

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

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

私はこのJSON文字列を得ました

関連する問題