15

我有一个设置了帐户和 account/:account_id 选项的路由器。当用户登陆我的应用程序的索引页面时,我将它们转换到帐户路由。

Social.Router.map(function() {
    this.resource('accounts', function(){
        this.resource('account', { path: ':account_id'});
    });
});

Social.IndexRoute = Ember.Route.extend({
    redirect: function() {
        this.transitionTo('accounts');
    }
});

我想做的是根据某些标准将它们转换为指定的 :account_id 路由。目前我只想获取数组中的第一个帐户并使用它。但在未来,这可能是一种将他们转移到他们查看的最后一个帐户的方法。像这样的东西:

Social.IndexRoute = Ember.Route.extend({
    redirect: function() {
        this.transitionTo('accounts/:account_id');
    }
});

文档给出了“详细信息”,但没有提供示例,仅提供以下内容:

过渡到(名称,模型)

过渡到另一条路线。(可选)为相关路线提供模型。该模型将使用序列化钩子序列化到 URL 中。

我尝试了以下方法:

this.transitionTo('accounts/4');
Uncaught Error: assertion failed: The route accounts/4 was not found

this.transitionTo('accounts', Social.Account.find(1));
Uncaught More objects were passed than dynamic segments
4

5 回答 5

13

我把其他人的答案和一些摆弄放在一起,得出了这个答案:

定义您的路线,例如:

this.resource('accounts', function () {
    this.route('account', {path: '/:account_id'});
});

重定向:

this.transitionTo('accounts.account', accountObj);

但是,如果您从服务器加载,则需要accountObj在重定向之前加载对象:

var accountObj = App.Account.find(1);
accountObj.one('didLoad', this, function () {
    this.transitionTo('accounts.account', accountObj);
});

我用完整的例子设置了这个小提琴

于 2013-02-28T11:05:01.897 回答
3

看起来transitionTo 已被弃用,取而代之的是transitionToRoute。

尽管如此,您可以通过拥有原始声明来实现重新路由,this.resource('account', { path: '/:account_id'});然后使用单个创建的对象进行转换。

于 2013-02-27T07:04:05.257 回答
2

您没有正确指定路由路径,您应该在资源下有一个路由,而不是另一个资源。它应该是这样的:

Social.Router.map(function() {
    this.resource('accounts', function(){
        this.route('account', { path: '/:account_id'});
    });
});

Social.IndexRoute = Ember.Route.extend({
    redirect: function() {
        this.transitionTo('accounts.account', Social.Account.find(1));
    }
});
于 2013-02-27T20:59:39.997 回答
1

使用最新的 Ember (1.0.0-RC-6),可以完美运行。

路由器:

this.resource('accounts', function () {
    this.resource('account', {path: '/:account_id'});
});

重定向:

this.transitionToRoute('account', Social.Account.find(1))
于 2013-07-24T07:04:01.153 回答
0

由于您的 /:account_id 是您需要 transitionToRoute 'account' 的资源。您还需要相应的 AccountRoute。

如果 /:account_id 是路由而不是资源,您将 transitionToRoute 'accounts.account' 并且您的路由处理程序将被称为 AccountsAccountRoute。

于 2013-02-27T21:54:04.350 回答