2013-03-08 36 views
2

我有一個路由器設置,看起來像這樣:火法每次航線蛞蝓改變

Social.Router.map(function() { 
    this.resource('accounts', function(){ 
     this.resource('account', { path: ':account_id'}); 
    }); 
}); 

當進入account路線我使用的激活方法做一些DOM操作。

Social.AccountRoute = Ember.Route.extend({ 
    activate: function(){ 
     console.log('entered the account route') 
    } 
}); 

這個偉大的工程,在第一次輸入的帳戶路線。問題是我有能力在不離開帳戶路線的情況下從賬戶更改帳戶。這意味着我可以去:

account/1 

account/2 

但激活方法只能觸發一次,我第一次進入帳戶的路線。每當account_id slu changes變化時,是否有方法會觸發?

回答

2

activatedeactivate僅在進入新路線時被觸發。但是,將在每次更改/account/:account_id時調用方法model,setupControllerserialize(編輯:正如@mavilein在評論中指出的那樣,model只會在被URL更改觸發時調用,並且我離開了renderTemplate)。

無論如何,你的路由和控制器不應該關心DOM操作。通過綁定到重要的值或觀察控制器中的更改,將其留給您的視圖和模板。

+0

這是一個很好的點丹。所以如果我需要做DOM操作,我應該把它放在AccountController init方法中? – commadelimited 2013-03-08 20:06:31

+2

模型掛鉤只在通過URL輸入應用程序時執行。 – mavilein 2013-03-08 20:07:14

+1

DOM Mnaipulation應完全駐留在您的視圖中。 – mavilein 2013-03-08 20:08:00

4

不是一個非常直觀的解決方案,但也有3種方法被執行每次模型的變化:

  • 連載
  • setupController
  • renderTemplate