2014-10-27 112 views
0

我试图在“相册”的“编辑”页面上显示“曲目”列表。Ember路由:是否可以嵌套在“动词”路由中,而不是“名词”?

我router.js.coffee看起来是这样的:

@resource 'albums', -> 
    @resource 'album', path: '/:album_id', -> 
    @route 'edit', -> 
     @resource 'tracks' 

如果我访问/albums/1/edit,在 'edit.handlebars' 模板显示正确。但是,如果我将{{outlet}}标签放入该模板中,则不会触发我的TracksRoute

展望灰烬检查,它看起来像“albums.edit.index”路线正在被使用,和我的“轨道”的路线被嵌套在相同水平,而不是它下面:

albums (AlbumsRoute) 
| 
| 
|-> album (AlbumRoute) 
     | 
     | 
     |-> album.edit (AlbumEditRoute) 
      | 
      | 
      |-> tracks (TrackRoute) 
      | 
      | 
      |-> album.edit.index (AlbumEdit.IndexRoute) 

我想我想要TrackRoute低于AlbumEdit.IndexRoute,但我会解决任何其他方式来列出父母的“编辑”页面上的子模型记录(理想情况下,他们会以一种方式列出我可以在原地进行CRUD操作)

回答

0

您需要在同一条路径中使用多个控制器才能完成此操作:

Router.map(function() { 
    this.resource('albums', function() { 
    this.resource('album', {path: '/:album_id'}, function() { 
     this.route('edit'); 
    }); 
    }); 
}); 

App.AlbumEditRoute = Em.Route.extend({ 
    setupController: function(editController, model) { 
    var tracksController = this.controllerFor('tracks'); 

    this._super(editController, model); 
    tracksController.set('model', model.get('tracks')); 
    } 
}); 

而且在你的模板:album/edit/index.hbs

<div class="edit-form"> 
    {{!-- anything related to edit --}} 
</div> 

<div class="edit-tracks"> 
    {{render "tracks"}} 
</div> 
+0

在这种情况下,我不能把一个{{口}}到我的'edit.handlebars'模板将显示TrackRoute吧?这就是我想要的。 – nikz 2014-10-27 21:34:37

+0

在技术上,你可以放一个'动词',没有什么能阻止你这样做。 – Asgaroth 2014-10-27 21:41:27

+0

我想也许我失去了一些东西:)为了路由的控制器/模板被渲染,它需要嵌套在父路由中,对吗?这意味着为了{edit}里面的edit.handlebars渲染TrackRoute,TrackRoute需要嵌套在编辑内 - 我正在做,但它不工作:) – nikz 2014-10-28 09:17:01