Ember.js中单个资源中的多个动态段

Multiple Dynamic Segments in a Single Resource in Ember.js

本文关键字:动态 资源 js 单个 Ember      更新时间:2024-03-22

有没有一种方法可以用一个资源拥有多个动态段?我的用例是避免让用户点击索引路由。

示例:

this.resource('tracks', { path: 'albums/:album_id/tracks/:tracks_id' });

我想避免用户点击以下路线:

albums/:album_id
albums/:album_id/tracks
albums/:album_id/tracks/:track_id

路线:

this.resource('albums', { path: 'albums' }, function(){
  this.resource('album', { path: '/:album_id' }, function() {
    this.resource('tracks', { path: 'tracks' }, function(){
      this.resource('track', { path: '/:track_id' });
    });
  });
});

如有任何帮助,我们将不胜感激。

定义您的路线

注意:如果使用this.resource定义资源,并且不提供函数,则不创建隐式resource.index路由。

最好使用Ember的嵌套路由。每条管线都有自己的动态线段。

App.Router.map(function () {
    this.resource('albums', { path: '/albums' }, function () {
        this.resource('album', { path: ':album_id' }, function () {
            this.resource('tracks', { path: 'tracks' }, function () {
                this.resource('track', { path: ':track_id' });
            });
        });
    });
});

如果你想在点击相册后立即向用户显示第一首曲目,你可以使用重定向。

App.AlbumRoute = Ember.Route.extend({
    afterModel: function (album, transition) {
        this.transitionTo('track', {album_id: album.id, track_id: album.tracks[0].id});
    },
});

查看有关重定向的文档:http://emberjs.com/guides/routing/redirection/

为了完整起见,索引路由不是必要的,如果你定义了它们,它们只是一种免费的便利,如果你不定义它们,它就不会去给它们。

http://emberjs.jsbin.com/eMofowUQ/1/edit

你可以在一条路径中定义多个蛞蝓,然后直接访问它,只需注意,你只有一个单一资源的单一模型,所以你必须处理它。

http://emberjs.jsbin.com/eMofowUQ/2/edit

我们可能的解决方案是使用以下内容:

App.AlbumsIndexRoute = Ember.Route.extend({ 
    redirect: function(){ 
        this.transitionTo('dashboard');
    } 
});