2014-01-07 106 views
1

你好,并感谢您抽出时间来帮助我。灰烬 - 渲染问题 - 多对多

我有以下型号:

App.Project = DS.Model.extend({ 
    name: DS.attr('string'), 
    projectTeams: DS.hasMany('projectTeam'), 
}); 

App.ProjectTeam = DS.Model.extend({ 
    sdeEffort: DS.attr('number'), 
    team: DS.belongsTo('team'), 
    project: DS.belongsTo('project'), 
}); 

App.Team = DS.Model.extend({ 
    projectTeams: DS.hasMany('projectTeam'), 
    name: DS.attr('string') 
}); 

和下面的HTML:

<table class="table table-bordered" border="1"> 
    <tr> 
     <th> 
     Name 
     </th> 
     {{#each team in teams}} 
     <th> 
      team.name 
     </th> 
     {{/each}} 
    </tr> 
    {{#each project in model}} 
    <tr> 
     <td> 
     {{project.name}} 
     </td> 
     <td> 
     // WHAT SHOULD COME HERE?? 

喜欢的东西的foreach队的foreach project.project_teams,如果team.id == project_team.team_id打印project_team否则.sdeEffort .. ???如果我只是创建一个空白列,然后我不得不每队numberOfProjectTeamsForProject-1列这不是我想要的。我想也许可以保持我多少

 </td> 
    </tr> 
    {{/each}} 
    </table> 

所以基本上有三种模式作为计数你可以看到。项目有很多ProjectTeam。团队有很多ProjectTeam。 ProjectTeam属于Project和Team。

我想要做的是:

我打印出表的项目名称,作为表头,我渲染columsn每一个可能的球队有。现在,对于每个项目,我只想为属于我用ProjectTeam(sdeEffort)中找到的值迭代的项目的团队填充团队列。如果有问题的团队不是该项目的一部分,我想渲染一个空列。我已经尝试实施我自己的车把手辅助方法和所有这些,但没有一个会工作..

这是甚至可以在Ember /把手吗?

期望了(表):

Project name T1 T2 T3 
__________________________ 
Project 1 | | 1 | | 
Project 2 | 2 | 10 | | 
Project 3 | | | | 
Project 4 | | | 7 | 

1队参与项目1只,2队参与项目2和3,和第3小组参与项目4.没有团队参与项目3

回答

0

你可以创建你的控制器,这是从你的模型得出一个teamsProjectsTable属性,并返回一个普通JS对象,看起来像:

{ 
    teamNames: ["T1", "T2", "T3"], 
    projects: [ 
    {name: "Project 1", cells: [1, null, 1, null] }, 
    {name: "Project 1", cells: [2, 2, 10, null] }, 
    {name: "Project 1", cells: [3, null, null, null] }, 
    {name: "Project 1", cells: [4, null, null, 7] } 
    ] 
} 

在你的属性中用Javascript构造这个对象很简单,然后视图也变得微不足道。

例如,它可能是这个样子:

App.ProjectsController = Ember.Controller.extend({ 
    function teamsProjectsTable() { 
    var result = {teamNames: [], projects: []}; 
    var teams = this.get("teams"); 
    var projects = this.get("projects"); 

    // do lots of stuff here with teams and projects to make result look like the thing above 

    return result; 
    }.property(); 
}); 

并在视图:

<table class="table table-bordered" border="1"> 
<tr> 
    <th> 
    Name 
    </th> 
    {{#each teamName in teamsProjectsTable.teamNames}} 
    <th> 
     teamName 
    </th> 
    {{/each}} 
</tr> 
{{#each project in teamsProjectsTable.projects}} 
<tr> 
    <td> 
    {{project.name}} 
    </td> 
    {{#each teamCell in project.cells}} 
    <td>{{teamCell}}</td> 
    {{/each}} 
<tr> 
{{/each}} 
</table>