Ember.js 余烬路由器过渡到不';不存在
我有一个问题,我的余烬应用程序,只要登录页面加载一次,我可以登录刚刚好,它带我到正确的页面。然而,当我刷新登录页面,然后登录时,它会将我带到一个奇怪的路由,该路由没有在我的路由器中设置 正确的转换应该是Ember.js 余烬路由器过渡到不';不存在,ember.js,Ember.js,我有一个问题,我的余烬应用程序,只要登录页面加载一次,我可以登录刚刚好,它带我到正确的页面。然而,当我刷新登录页面,然后登录时,它会将我带到一个奇怪的路由,该路由没有在我的路由器中设置 正确的转换应该是login->authenticated.individual.info 但我要走的路是登录->登录.individual.info 我真的很困惑,到底是什么原因导致路由器将我发送到一条不存在的路由,或者我只是不太熟悉路由器的工作原理 app/router.js Router.map(functi
login
->authenticated.individual.info
但我要走的路是登录
->登录.individual.info
我真的很困惑,到底是什么原因导致路由器将我发送到一条不存在的路由,或者我只是不太熟悉路由器的工作原理
app/router.js
Router.map(function() {
this.route('authenticated', { path: '/:slug' }, function() {
this.resource('individual', { path: 'individual/:id' }, function() {
this.route('info');
});
});
this.route('login', { path: 'login/:slug' });
});
import Ember from 'ember';
var bind = Ember.run.bind;
export default Ember.Route.extend({
model: function(params) {
return {'slug': params.slug};
},
actions: {
login: function(credentials) {
this.get('session').login(credentials)
.then(bind(this, 'authenticationDidSucceed'),
bind(this, 'authenticationDidFail'));
}
},
authenticationDidSucceed: function() {
var transition = this.get('controller.attemptedTransition');
var individual_id = this.get('session').individual_id;
if (transition) {
transition.retry();
} else {
this.transitionTo('individual.info', individual_id);
}
},
authenticationDidFail: function(response) {
var message = response.responseJSON.error;
this.set('controller.error', message);
},
resetController: function(controller) {
controller.setProperties({error: null, notice: null});
}
});
...
<div class='form-group'>
<button {{action 'login' model}} type='submit' class="btn btn-default form-control">Sign in</button>
</div>
...
slug
本质上是一个与每个用户的成员信息数据相连的个人简称
app/login/route.js
Router.map(function() {
this.route('authenticated', { path: '/:slug' }, function() {
this.resource('individual', { path: 'individual/:id' }, function() {
this.route('info');
});
});
this.route('login', { path: 'login/:slug' });
});
import Ember from 'ember';
var bind = Ember.run.bind;
export default Ember.Route.extend({
model: function(params) {
return {'slug': params.slug};
},
actions: {
login: function(credentials) {
this.get('session').login(credentials)
.then(bind(this, 'authenticationDidSucceed'),
bind(this, 'authenticationDidFail'));
}
},
authenticationDidSucceed: function() {
var transition = this.get('controller.attemptedTransition');
var individual_id = this.get('session').individual_id;
if (transition) {
transition.retry();
} else {
this.transitionTo('individual.info', individual_id);
}
},
authenticationDidFail: function(response) {
var message = response.responseJSON.error;
this.set('controller.error', message);
},
resetController: function(controller) {
controller.setProperties({error: null, notice: null});
}
});
...
<div class='form-group'>
<button {{action 'login' model}} type='submit' class="btn btn-default form-control">Sign in</button>
</div>
...
app/login/template.hbs
Router.map(function() {
this.route('authenticated', { path: '/:slug' }, function() {
this.resource('individual', { path: 'individual/:id' }, function() {
this.route('info');
});
});
this.route('login', { path: 'login/:slug' });
});
import Ember from 'ember';
var bind = Ember.run.bind;
export default Ember.Route.extend({
model: function(params) {
return {'slug': params.slug};
},
actions: {
login: function(credentials) {
this.get('session').login(credentials)
.then(bind(this, 'authenticationDidSucceed'),
bind(this, 'authenticationDidFail'));
}
},
authenticationDidSucceed: function() {
var transition = this.get('controller.attemptedTransition');
var individual_id = this.get('session').individual_id;
if (transition) {
transition.retry();
} else {
this.transitionTo('individual.info', individual_id);
}
},
authenticationDidFail: function(response) {
var message = response.responseJSON.error;
this.set('controller.error', message);
},
resetController: function(controller) {
controller.setProperties({error: null, notice: null});
}
});
...
<div class='form-group'>
<button {{action 'login' model}} type='submit' class="btn btn-default form-control">Sign in</button>
</div>
...
。。。
登录
...
在您的authenticationDidSuccessed
方法中,您需要转换到特定的路由名称this.transition('authenticated.individual.info')
。与其转换到不同的路由叶,不如说Ember只是在当前叶中查找该路由。在您的AuthenticationDidSuccessed
方法中,您需要转换到特定的路由名称this.transition('authenticated.individual.info')
。与其转换到另一个路由叶,不如说Ember只是在当前叶中查找该路由。我尝试过,但它出现了以下错误:未捕获错误:断言失败:未找到经过身份验证的路由。individual.info
Hmm是否尝试将单个路由更改为路由而不是资源?清除名称空间的资源可能会导致一些奇怪的情况。我想我已经知道它是什么了。我想我把路由器弄糊涂了,因为经过身份验证的路由需要一个slug作为参数,而单独的路由需要一个单独的_id作为参数。我刚刚将转换更改为this.transition('authenticated',this.currentModel.slug)代码>然后我在到达经过身份验证的路由后处理了到单个路由的转换。很高兴您能够找到它!我试过了,它给出了这个错误:Uncaught error:Assertion失败:找不到经过身份验证的路由.individual.info
Hmm尝试将单个路由更改为路由而不是资源吗?清除名称空间的资源可能会导致一些奇怪的情况。我想我已经知道它是什么了。我想我把路由器弄糊涂了,因为经过身份验证的路由需要一个slug作为参数,而单独的路由需要一个单独的_id作为参数。我刚刚将转换更改为this.transition('authenticated',this.currentModel.slug)代码>然后我在到达经过身份验证的路由后处理了到单个路由的转换。很高兴您能够找到它!