Ember.js中单个资源中的多个动态段 [英] Multiple Dynamic Segments in a Single Resource in Ember.js

查看:166
本文介绍了Ember.js中单个资源中的多个动态段的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有没有办法通过一个资源拥有多个动态细分?我的用例是避免让用户打索引路线。



示例:

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

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

 相册/:album_id 
相册/:album_id / tracks
相册/: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 'track',{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/


Is there a way to have multiple dynamic segments with a single resource? My use case is to avoid letting the user hit index routes.

Example:

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

And I'd like to avoid the user from hitting the following routes:

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

Routes:

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' });
    });
  });
});

Any help would be greatly appreciated.

Defining Your Routes

NOTE: If you define a resource using this.resource and do not supply a function, then the implicit resource.index route is not created.

解决方案

It would be better to use Ember's nested routes. Each route having its own dynamic segment.

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' });
            });
        });
    });
});

If you want to show the user the first track immediately after clicking an album, you could use a redirect.

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

Check out the docs on redirection: http://emberjs.com/guides/routing/redirection/

这篇关于Ember.js中单个资源中的多个动态段的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆