2013-12-07 43 views
0

我按照这个指南嵌套的路线:http://emberjs.com/guides/routing/defining-your-routes/#toc_resourcesEmber.js:过渡到嵌套路由调用哪个动作?

我有一个嵌套的路线:

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

“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'); 
     } 
    } 
}); 
+0

sry,我不明白。如果我将我的代码放入路由中的'beforeModel'中,我怎么知道我是否执行注册代码或登录代码?我的控制器处理两种情况,这就是为什么我的控制器中有多个动作。我没有得到这个控制器的东西。为什么我不能打电话给一些行动?我的意思是,'beforeModel'如何知道我是否想执行'indexAction'或'registerAction'的代码,因为它们是在我的'AccountRegisterController'中定义的? – tester