2012-06-15 24 views
5

Cuando uso el enrutador Ember, ¿cómo puedo definir las acciones en la plantilla que están conectadas al controlador?Ember.js Acción del enrutador al controlador

Un ejemplo es aquí: http://jsfiddle.net/KvJ38/3/

Unter mi perfil son dos acciones: uno se define en el Estado, y está trabajando en dos se define en el controlador. ¿Cómo puedo hacer que esto funcione o debería usar otro enfoque?

App.Router = Em.Router.extend({ 
    enableLogging: true, 
    location: 'hash', 

    root: Em.State.extend({ 
    // EVENTS 
    goHome: Ember.State.transitionTo('home'), 
    viewProfile: Ember.State.transitionTo('profile'), 

    // STATES 
    home: Em.State.extend({ 
     route: '/', 
     connectOutlets: function(router, context) { 
     var appController = router.get('applicationController'); 
     appController.connectOutlet(App.HomeView); 
     } 
    }), 

    // STATES 
    profile: Em.State.extend({ 
     route: '/profile', 
     connectOutlets: function(router, context) { 
      var appController = router.get('applicationController'); 
      appController.connectOutlet(App.ProfileView); 
     } 
    }), 

    one: function() { 
     alert("eins"); 
    }, 
    }) 
}); 

Respuesta

12

El destino predeterminado de una acción es el router, pero se puede definir otro en la plantilla:

{{action two target="controller"}} 

Y añadir una función de "dos" en "App.ProfileController".

ACTUALIZACIÓN

Esta respuesta era de esperar correcta mediados de 2012. Ahora (septiembre de 2014), la documentación dice:

Por defecto, el ayudante {{action}} desencadena un método en el controlador de la plantilla. [...] Si el controlador no implementa un método con el mismo nombre que la acción en su objeto de acciones, la acción se enviará al enrutador, donde la ruta hoja actualmente activa tendrá la oportunidad de manejar la acción . [...] Si ni el controlador de la plantilla ni la ruta actualmente activa implementa un controlador, la acción continuará burbujeando a cualquier ruta principal. En última instancia, si se define un ApplicationRoute, tendrá la oportunidad de manejar la acción. Cuando se desencadena una acción, pero no se implementa un controlador de acción coincidente en el controlador, la ruta actual o cualquiera de los antecesores de la ruta actual, se produce un error.

+1

Gracias. Aquí está la solución de trabajo: http://jsfiddle.net/KvJ38/4/ – Lux

+1

En realidad, el objetivo predeterminado de una acción es el controlador que lo contiene y luego el enrutador. Aquí hay un ejemplo de jsbin que muestra que el controlador maneja la acción cuando está definida tanto en el controlador como en la ruta: http://emberjs.jsbin.com/tupil/3/edit. Y aquí están los documentos de ember sobre acciones: http://emberjs.com/guides/templates/actions/ – bantic

+0

De los documentos: "De forma predeterminada, el ayudante {{action}} desencadena un método en el controlador de la plantilla" http://emberjs.com/guides/templates/actions/#toc_action-bubbling – fmendez

0

El controlador no debe estar "directamente" a cargo del evento de acción. El estado/ruta es.

Creo que https://github.com/emberjs/ember.js/issues/1015 te ayudará.

+0

Gracias. ¡Este enlace es útil! Pero, ¿qué hay de la vista? ¿Por qué la Vista no es el objetivo predeterminado? http://jsfiddle.net/KvJ38/9/ – Lux

4

Puede especificar el atributo de destino explícitamente, como lo señala @ Stéphane, para enviar la acción a otro lugar.

Si no se especifica, el objetivo de un action helper es el controller.target. Como ha notado, esto generalmente se configura en el enrutador.

Si tiene una plantilla en la que desea que el objetivo predeterminado sea diferente, puede hacerlo estableciendo la propiedad de destino del controlador. Por ejemplo, para establecer el destino en el controlador en sí:

App.MyController = Ember.Controller.extend({ 
    init: function(){ 
    this._super(); 
    this.set('target', this); 
    }; 
}); 
+0

También para burbujear para el manejo de acción, mientras que la secuencia dice ... controlador actual, luego la ruta actual y luego otras rutas activas ... ¿significa que solo para padres? las rutas tienen la oportunidad de manejar (y no los controladores. Controladores principales)? – testndtv

Cuestiones relacionadas