Ember.js:transitionTo路由,然后是动态段

时间:2013-02-26 22:19:57

标签: ember.js

我在路由器上设置了帐户和帐户/: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');
    }
});

文档提供“详细信息”但不提供示例,仅提供以下内容:

  

transitionTo(名称,型号)

     

过渡到另一条路线。可选择为路线提供模型   有问题。该模型将使用。序列化到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

5 个答案:

答案 0 :(得分: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);
});

我设置了this fiddle完整示例

答案 1 :(得分:2)

看起来,不得转用transitionTo而转而使用transitionToRoute。

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

答案 2 :(得分: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));
    }
});

答案 3 :(得分:1)

使用最新的Ember(1.0.0-RC-6),效果非常好。

<强>路由器:

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

重定向:

this.transitionToRoute('account', Social.Account.find(1))

答案 4 :(得分:0)

由于您的/:account_id是您需要转换为“帐户”的资源。您还需要相应的AccountRoute。

如果/:account_id是一条路线而不是资源,您将转移到'accounts.account'并且您的路线处理程序将被称为AccountsAccountRoute。