具有共享模板的多个嵌套路由

时间:2014-11-30 10:16:07

标签: ember.js

我创造了一个Ember,其主要目的是以几种不同的方式展示一系列信息。数据的主要结构如下:项目包含多个,其中包含多个文档中的文档也具有彼此的父子关系。

我想要创建的这些数据的两个视图是:

  1. 查看群组 文件
  2. 之间的关系
  3. 查看属于群组
  4. 的所有文件

    这两项都需要在显示信息之前选择项目,而第一项还需要选择初始文档。选择项目群组文档的此功能也将用于其他数据视图。

    因此,我希望在不同的视图中重用一堆路由和模板。

    我目前使用此路线图(以及相关的路线和模板)使用第一个视图:

    this.resource('RelationshipView', { path: '/relationship'}, function(){
      this.resource('Project', { path: '/:project_id'}, function(){
        this.resource('Group', { path: '/:group_id'}, function(){
          this.resource('Document', { path: '/:doc_id'});
        });
      });
    });
    

    我想添加这个路线图:

    this.resource('DocumentTable', { path: '/relationship'}, function(){
      this.resource('Project', { path: '/:project_id'}, function(){
        this.resource('Group', { path: '/:group_id'});
      });
    });
    

    我最初尝试更改最后一个资源的名称并为其创建一个新模板。但是我从父资源链接到它时遇到了麻烦。

    下一个想法是,如果当前路径是端点,则更改为路由呈现的模板。但是现在我遇到了一个问题,就是进入./RelationshipView/并点击链接转到./RelationshipView/:project_id并最终进入./DocumentTable/:project_id

    有没有人有任何想法?

    现在似乎我不得不放弃模板和路由重用的想法,这意味着一堆复制粘贴:(

1 个答案:

答案 0 :(得分:0)

您应该尝试使用partial template。将实际模板代码放在单独的部分中,然后在Group模板中调用该部分代码。我发现这比改变路线将呈现的模板更容易理解。

您可能需要重命名资源。您不能拥有同名的多个资源。但是,如果您使用偏好来共享模板,则名称不重要。