2012-06-25 26 views
5

¿Hay alguna otra posibilidad de manejar con los controladores y vistas Ember.Router? La estructura de mi aplicación generalmente depende de require.js, que se ocupa de las dependencias correspondientes.¿Cómo puedo configurar ApplicationController en Ember.Router

En mi ejemplo, estoy haciendo lo de App.ApplicationController como el controlador principal del enrutador.

Aquí hay una jsFiddle: http://jsfiddle.net/mediastuttgart/uMKGt/1/

Pero ¿hay alguna posibilidad de establecer de forma manual? Encontré este mensaje de confirmación https://github.com/emberjs/ember.js/commit/be69395f5eec4187b1df052d7386bcda45f79475 donde puedo ver, cómo configurar el controlador y verlo manualmente (de todos modos no pude hacerlo funcionar). Pero no se encontraron ejemplos como:

App = Ember.Application.create(); 

App.MyController = Ember.Controller.extend({}); 
App.MyView = Ember.View.extend({}); 

Router = Ember.Router.extend({ 
    applicationController : App.MyController, 
    root : Ember.Route.extend({ 
     index : Ember.Route.extend({ 
      route : '/', 
      connectOutlets : function (router) { 
       router.get('applicationController').connectOutlet(App.MyView); 
      } 
     }) 
    }), 
    ... 
}); 

EDITAR

que estoy tratando de explicar esto un poco más en detalle. Si bien utilizamos require.js para administrar o dependencias, tenemos múltiples controladores que son responsables de sus propias partes de la aplicación completa. Digamos que tenemos un formulario de suscripción al boletín informativo. El controlador utilizado para este escenario se estructura en

- app 
-- controller 
--- newsletter 
---- signup.js 
--- cart 
--- checkout 
-- view 
-- model 
-- router 
-- template 

Como usamos una función personalizada para generar espacios de nombres Em.Provide('App.Controller.Newsletter'); lo que crea un objeto en App.Controller.Newsletter. Este objeto ahora sirve como base de control para toda nuestra aplicación de boletín. A partir de App.Controller.Newsletter.Signup = Ember.Controller.extend({}); tenemos que pasar en esta instancia como "ApplicationController" para el enrutador. Como puede ver, no podemos simplemente usar App.ApplicationController para instanciar un controlador para Ember.Router.

Respuesta

9

No sabe nada acerca de RequireJS, pero creo que la única cosa es definir una

App.ApplicationController = Ember.Controller.extend({...behavior here...}) 

y luego, cuando se llama a

App.initialize() 

El marco será entonces inyectar automáticamente este controlador el enrutador

+6

N.B. El nombramiento es importante aquí. Ember busca un ApplicationController debajo del espacio de nombres de su aplicación. si la pregunta original hubiera usado eso en lugar de MyApplicationController, habría funcionado automáticamente. –

+0

@BradleyPriest Debería haber escrito esto ... –

+0

Gracias por las respuestas. He actualizado mi pregunta con más detalles. –

Cuestiones relacionadas