我在路由器上设置了帐户和帐户/: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
答案 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。