[英]execute code only when the “base” route is activated in emberjs
激活/重新激活“基本”路由时,是否有执行方法? 我有以下网址:
Router.map(function() {
// /projects
this.resource('projects', function() {
// /projects/2
this.resource('project', {path: ':id'});
});
});
如果项目路线中仅返回一个项目,我想transitionTo
到单个projects
路线。 我可以做这个:
import Ember from 'ember';
export default Ember.Route.extend({
model: function() {
return this.store.findAll('project');
},
afterModel: function(projects, transition) {
if (projects && projects.get('length') === 1) {
this.transitionTo('project', projects.get('firstObject'));
}
}
});
这很好用...除非我仍然可以转到projects
路线,并且由于模型已经加载,所以钩子不会再次触发。 当projects
路线激活时,有没有办法监听始终执行该规则的方法?
例如,如果我转到/projects/23
,然后转到/projects
我想将它们自动转换为单个项目路由(如果只有一个)。 我不知道该怎么做,因为这是一条嵌套路线,并且第一次访问/projects/23
时已经activate
了activate
和afterModel
方法。
那有意义吗? 我怎么能做到这一点?
在项目资源上使用索引路由。 仅当您命中/projects
时才会命中
ProjectsIndex
export default Ember.Route.extend({
model: function() {
var projects = this.modelFor('projects');
if (projects && projects.get('length') === 1) {
this.transitionTo('project', projects.get('firstObject'));
}
},
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.