2013-04-09 13 views
25

Esiste un modo infallibile per accedere al controller da un percorso?Come accedere al controller dalla rotta in Ember?

<a href="#" class="btn" {{action "someAction" user}}>add</a> 

App.ApplicationRoute = Ember.Route.extend 
    events: 
    someAction: (user) -> 
     console.log 'give me name from currentUser controller' 

L'azione è molto generale e penso che ApplicationRoute sia il posto migliore.

risposta

25

penso che il metodo controllerFor dovrebbe essere disponibile a questo evento:

App.ApplicationRoute = Ember.Route.extend 
    events: 
    someAction: (user) -> 
     console.log this.controllerFor("currentUser").get("name") 

Aggiornamento in risposta alle domande nei commments:

Tutto dipende da cosa si vuole fare. Preoccuparsi di ASCIUGARE su un metodo così basilare, non ha molto senso imho.

Nei tuoi complimenti caso sinistra farei questo:

App.ApplicationRoute = Ember.Route.extend 
    events: 
    someAction: (user) -> 
     this.controllerFor("currentUser").decrementKudos(); 
     // implement the decrementKudos in your controller 

ma credo che la memorizzazione di questo regolatore dovrebbe anche funzionare, se questo è troppo codice per voi:

App.ApplicationRoute = Ember.Route.extend 
    currentUserCon : this.controllerFor("currentUser") 
    events: 
    someAction: (user) -> 
     this.currentUserCon.decrementKudos(); 
     // implement the decrementKudos in your controller 
+0

Grazie, ma è possibile ottenere un riferimento a tale proprietà, ad esempio posso memorizzarlo in una variabile in modo che possa operare su di esso? 'name = this.controllerFor ('currentUser'). Get 'name'' ' return "ciao, # {nome}' possibile? L'accesso ai controller in questo modo molte volte non è ASCIUTTO :) – wryrych

+0

Ad esempio questo sarebbe un overkill: 'this.controllerFor ('currentUser'). set 'kudosLeft', this.controllerFor ('currentUser'). get 'kudosLeft' - 1' :) – wryrych

+1

Vedere la mia risposta aggiornata. – mavilein

7

Nel versione più recente di ember è possibile accedere al controller della rotta corrente nel percorso come sotto

Ember versione 2.5

currentUserCon : this.controller 

se si desidera accedere ad altri percorsi controller quindi utilizzare il metodo controllerFor.

+1

I ' Ho trovato (almeno nella mia app Ember 2.14) che 'this.controller' è' indefinito' almeno attraverso il hook di hook 'activate()', ma 'controllerFor ('cu rrent.route.name ') 'restituirà il controller. –

Problemi correlati