3

我想通过username或在我的网络应用程序上显示个人资料页面user_id。我试过以下没有成功,有什么想法吗?

MyApplication.Router.map(function () {

    this.resource('user', { path: '/user' }, function () {
        this.resource('profile', {path: '/profile/id/:user_id'});
        this.resource('profile', {path: '/profile/:user_username'});
    });

    this.resource('notFound', {path: '/notfound'});
});
4

4 回答 4

2

您可以将这两种资源合并为一个,如下所示:

MyApplication.Router.map(function () {
  this.resource('user', { path: '/user' }, function () {
    this.resource('profile', {path: '/profile/id/:value'});
  });
});

MyApplication.ProfileRoute = Ember.Route.extend({
  model: function(params) {
    var value = params.value;
    if (isNaN(value)) {
      return this.store.find('user', { username: value });
    } else {
      return this.store.find('user', value);
    }
  }
});

如果valueURL 中的 是数字,它将执行findById; 否则它会做一个findQuery. 显然,如果某些用户名是数字,这种方法将失败。

于 2013-10-09T19:57:27.277 回答
2

看来 Ember 真的不应该以这种方式使用。我已经阅读了Embers Github上的问题551571。我认为最好坚持按 id 向用户显示,以避免与框架发生冲突。

于 2013-10-11T10:41:10.463 回答
0

可能与配置文件资源的嵌套路由

MyApplication.Router.map(function () {

    this.resource('user', { path: '/user' }, function () {
        this.resource('profile', function(){
            this.route('byid',{path: '/id/:user_id'});
            this.route('byname',{path: '/name/:user_username'});
        });
    });

    this.resource('notFound', {path: '/notfound'});
});

但是请记住使用 user_name http://emberjs.com/guides/routing/defining-your-routes/为路由的定义实现序列化

previos 方法也是有效的恕我直言

于 2013-10-09T11:40:13.970 回答
0

如果这URL对您来说很重要,您可以更改资源名称并保持 url 前缀相同,例如:

MyApplication.Router.map(function () {
  this.resource('user', { path: '/user' }, function () {
    this.resource('profileByUserId', {path: '/profile/id/:user_id'});
    this.resource('profileByUsername', {path: '/profile/:user_username'});
  });
  this.resource('notFound', {path: '/notfound'});
});

希望能帮助到你。

于 2013-10-09T11:30:24.953 回答