我已遵循本指南的嵌套路线:http://emberjs.com/guides/routing/defining-your-routes/#toc_resources
我有一个嵌套路线:
App.Router.map(function () {
this.resource('account', function() {
this.route('register');
});
});
在我的索引模板中,我调用了索引控制器的一个动作,就是这个:
App.IndexController = Ember.Controller.extend({
actions: {
doRegistration: function(){
this.transitionToRoute('account.register');
}
}
});
一切都在这里工作,我的AccountRegisterController甚至被实例化我认为以下内容被记录到控制台:
App.AccountRegisterRoute = Ember.Route.extend({
setupController: function(controller, model){
console.log('setting up controller'+controller);
}
});
这是我的AccountRegisterController:
App.AccountRegisterController = Ember.Controller.extend({
actions: {
register: function(){
console.log('account register');
},
index: function(){
console.log('account index');
}
}
});
问题是控制器的动作都没有被调用。为什么?如何判断transitionTo(...)
要采取的行动?我做错了什么?
答案 0 :(得分:0)
'transitionTo'不会调用操作,只是更改路径。
为了执行代码,您可以在路径上的不同挂钩中执行此操作。
你可以:App.AccountRegisterRoute = Ember.Route.extend({
beforeModel: function() {
console.log('setting up controller'+controller);
//write any register code here
}
});
或者您可以将动作发送到路线挂钩:
App.AccountRegisterRoute = Ember.Route.extend({
beforeModel: function() {
this.send('register');
this.transitionTo('account.welcome');
}
});
您可能想要做的是先执行操作,然后在没有中间路线的情况下进行转换。像这样:
App.IndexController = Ember.Controller.extend({
actions: {
doRegistration: function(){
//code to register user here.
this.transitionToRoute('account.welcome');
}
}
});
如果您希望能够重用您的注册控制器,您可以将其定义为父控制器中的一个动作,然后它会冒出来,就好像您没有在子控制器或路径中定义它一样:
App.ApplicationRoute = Ember.Route.extend({
actions: {
doRegistration: function(){
//code to register user here.
this.transitionTo('account.welcome');
}
}
});