我正在构建一个包含三个主要模型的项目管理应用程序:
Client
,Project
,Task
我的模型(仅限关系)
let client = DS.Model.extend({
projects: DS.hasMany('project');
});
let project = DS.Model.extend({
client: DS.belongsTo('client'),
tasks: DS.hasMany('task')
});
let task = DS.Model.extend({
project: DS.belongsTo('project')
});
要求:
我不确定通过嵌套资源来反映模型关系是否不正确:
/** Creates a nested UI by default: */
this.route('clients', function() {
this.route('projects', function() {
this.route('tasks', function() {});
});
});
我不希望我的UI嵌套并显示所有客户端下的所有项目等。
有没有比这更好的处理资源的方法?
// All projects for all clients
this.route('projects', function(){});
// Client's projects
this.route('clientProjects', { path: 'client/:id/projects' }, function() {});
答案 0 :(得分:1)
嵌套路由并不一定意味着您必须使用嵌套模板。每条路线都会创建其路线和索引子路线。你可以看到我对这个嵌套列表的意思。
* clients
* clients.index
* clients.projects
* clients.projects.index
* clients.projects.tasks
* clients.projects.tasks.index
注意:我正在谈论at this link的内容也有更多的互动表达。
如果您查看树,可以看到clients.index
是clients.projects
的兄弟。因此,如果显示clients.projects
模板,它将替换为clients.index
,但仍位于clients
之下。 clients.projects
- >也是如此。 clients.projects.tasks
个模板。
这种区别允许您在每个模板中放置您想要的任何内容,并将其保留(嵌套)或替换(不)。您可以充分利用所有这些模板来嵌套某些部分,而不是部分部分。
例如,如果您在clients
模板中放置了一个客户菜单,并且您在clients.index
模板中放置了包含所有客户端统计信息的概述页面,那么当您导航到clients.projects时模板,您仍会看到包含所有客户端的菜单,但概述模板将被替换。
您将使用默认的{{outlet}}
为您创建未明确创建的任何模板,以便它们可以嵌套。因此,如果您没有创建clients
模板并将所有内容放在clients.index
模板中,它仍然有效,但当您导航到clients.projects
模板时,所有内容都会被替换。< / p>
<强>资源强>
另请注意: resource
将在2.0之前弃用,因此建议您在任何地方使用route
。
Ember-cli实施指令
$ ember new myapp && cd myapp
$ ember g route clients -p
$ ember g template clients/index -p
$ ember g route clients/projects -p
$ ember g template clients/projects/index -p
$ ember g route clients/projects/tasks -p