2012-10-27 5 views

risposta

9

Questa risposta funziona con RC1/RC2.

Ora è possibile utilizzare la dichiarazione needs per rendere accessibile il controllore desiderato. Ecco un esempio:

Supponiamo di voler ottenere qualcosa dal mio SettingsController dal mio ApplicationController. Posso fare quanto segue:

App.SettingsController = Ember.Controller.extend({ 
    isPublic: true 
}); 

App.ApplicationController = Ember.Controller.extend({ 
    needs: 'settings', 
    isPublicBinding: 'controllers.settings.isPublic' 
}); 

Ora, nel contesto della mia ApplicationController, posso solo fare this.get('isPublic')

+1

questo funziona usando l'ultima versione di EmberJS usando 'needs: ['settings']'. –

3

È possibile accedere a un'istanza di controllo all'interno di un'azione nel router via router.get('invitesController'), vedi http://jsfiddle.net/pangratz666/Pk4k2/:

App.InvitesController = Ember.ArrayController.extend(); 

App.Router = Ember.Router.extend({ 
    root: Ember.Route.extend({ 
     route: '/', 
     index: Ember.Route.extend({ 
      route: '/', 
      connectOutlets: function(router, context) { 
       var invitesController = router.get('invitesController'); 
      }, 
      anAction: function(router) { 
       var invitesController = router.get('invitesController'); 
      } 
     }) 
    }) 
});​ 
19

Ho un post veloce su questo argomento esatto sul mio blog. È un po 'più grande di un metodo diverso, ma sembra funzionare bene per Ember.js RC1.

Check it out a: http://emersonlackey.com/article/emberjs-instance-of-controller-and-views

L'idea di base è quella di fare qualcosa di simile:

var myController = window.App.__container__.lookup('controller:Posts'); 
+1

Yehuda ha interessanti commenti su questo. In realtà ha cambiato __container__ dal solo contenitore perché non voleva che le persone usassero questa API "privata". Devo accedere a un controller dalla mia applicazione principale dell'app e non vedo alternative a questo. In realtà, guardando il codice sorgente del discorso, stanno facendo anche qualcosa del genere. .. Discorso .__ contenitore __ lookup ('regolatore: modale') get ('CurrentView'); (Il discorso è stato creato da Steve Atwood che ha creato Stack Overflow, quindi sembra che sia l'unica alternativa in questo momento. – WallMobile

+1

It ... wokrs, grazie. Ma seriamente, non abbiamo niente di meno schifoso? ... – fabien