2013-12-07 62 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