javascript - foxe - Ember-Redirigir automáticamente a firstObject
foxe xml (4)
Como actualización, si no desea redirigir debido a que tiene una ruta anidada, querrá usar la redirección condicional en función de la ruta prevista.
redirect
tiene dos argumentos pasados, el modelo y el objeto de transición. La transición tiene la propiedad targetName
donde se puede redireccionar condicionalmente según su valor.
redirect: function(model, transition){
if(transition.targetName ===''doctors.index''){
this.transitionTo(''doctor'', model.get(''firstObject''));
}
}
Me gustaría un Ember path /clinic/1
para redirigir automáticamente y mostrar el primer médico: /clinic/1/doctor/1
.
Cada clínica tiene muchos doctores.
Desafortunadamente si uso este código:
var doctor = clinicController.get(''content.doctors.firstObject'');
router.transitionTo(''clinic.doctor.index'', doctor);
... no funciona, ya que content.doctors.length
sigue siendo 0
cuando este código se ejecuta en app_router.js
.
¿Algunas ideas?
Deberías poder hacer esto:
App.DoctorsRoute = Ember.Route.extend({
model: function() {
return App.Doctor.find();
},
redirect: function() {
var doctor = this.modelFor(''doctors'').get(''firstObject'');
this.transitionToRoute(''doctor'', doctor);
}
});
Esto funcionará porque:
- Si el enganche modelo devuelve un objeto que aún no se ha cargado, el resto de los enganches no se ejecutarán hasta que el modelo esté completamente cargado.
- Si el enganche de
redirect
pasa a otra ruta, el resto de los enganches no se ejecutarán.
Tenga en cuenta que a partir de 2426cb9 , puede .index
el .index
implícito durante la transición.
La redirección en la ruta no funciona para mí en mi aplicación basada en datos de brasas, ya que los datos no se cargan en el punto de redirección, pero esto funciona para mí ...
En el controlador de roles, hago la transición a la ruta del rol para el primer objeto cargado.
Application.RolesController = Ember.ArrayController.extend({
selectFirstObject: function () {
if (this.get(''content'').get(''isLoaded'')) {
var role = this.get(''firstObject'');
this.transitionToRoute(''role'', role);
}
}.observes(''content.isLoaded'')
});
HTH, Gerry
Para los usuarios de EmberCLI, lograrías lo mismo haciendo lo siguiente:
//app/routes/clinics/show.js
import Ember from ''ember'';
export default Ember.Route.extend({
redirect: function(model) {
var firstDoctor = model.get(''doctors.firstObject'');
this.transitionTo(''doctor'', firstDoctor);
}
});