props emberjs ember component classnamebindings bubbling ember.js

ember.js - emberjs - ember onclick



Emberjs se desplaza hacia arriba al cambiar de vista (5)

Cuando se cambia la vista principal de mi aplicación (nueva ruta que vuelve a conectar la salida principal de mi controlador de la aplicación) quiero que la página se desplace hacia arriba. De lo contrario, es un poco extraño que navegue a otra vista similar a una página y la ventana gráfica aún se pierda en algún lugar donde lo dejé.

Hacké una solución y me pregunto si hay una mejor manera o si alguien tiene la misma cosa.

Esto es lo que hago:

App.ApplicationController = Ember.Controller.extend({ connectOutlet: function(){ window.scrollTo(0, 0); this._super.apply(this, arguments); } });


Ahora es render(name, options) , y si está llamando específicamente a render (es decir, con un modal), quiere pasarlo a super ()

Ember.Route.reopen({ render: function(name, options) { if (name != null) { return this._super(name, options); } else { return this._super(); } } });


Guión de café:

Ember.Route.reopen activate: -> @_super() window.scrollTo(0, 0)

Javascript:

Ember.Route.reopen({ activate: function() { this._super(); window.scrollTo(0, 0); } });


La solución de @Baruch es buena, pero cuando la implementé, había renderizado en elementos dentro del estado de mi aplicación y causaba un scrollTop cuando no era necesario.

Encontré que esto es mucho más efectivo ya que solo se ejecuta en el cambio de ruta:

App.ApplicationController = Ember.Controller.extend({ currentPathChanged: function () { window.scrollTo(0, 0); }.observes(''currentPath'') });


Logré esto con el siguiente código:

Ember.Route.reopen({ render: function(controller, model) { this._super(); window.scrollTo(0, 0); } });


Probablemente debería intentar extender Ember.Route y agregar su window.scrollTo en la devolución de llamada. Luego, en lugar de utilizar la Route de Ember para sus rutas de hoja, usted llama a su ruta. extend() , por lo que se desplazarán automáticamente hacia arriba cuando ingrese una ruta / estado. Algo similar a esto:

// define your custom route and extend "enter" var MyRoute = Em.Route.extend({ enter: function(router) { // for now on, all the routes that extend this, // will fire the code in this block every time // the application enters this state // do whatever you need to do here: scroll and whatnot } }); App.Router = Em.Router.extend({ enableLogging: true, location: ''hash'', index: Em.Route.extend({ route: ''/'', connectOutlets: function(router) { ... }, // on your leaf routes, use your own custom route that // does your scroll thing or whatever you need to do home: MyRoute.extend({ route: ''/'', connectOutlets: function (router, context) { ... } }), // other routes... }) });

¿tiene sentido?