Не удается получить доступ к дочернему маршруту Ember через URL и перенаправляет меня на родительский маршрут - PullRequest
1 голос
/ 08 марта 2019

Я хочу получить доступ к дочернему маршруту через url например: https://my-app.com/dashboard/library. Когда я нажимаю на это, Ember перенаправляет меня на https://my-app.com/dashboard и корректно заполняет данные модели этого маршрута, но я хочу перейти на https://my-app.com/dashboard/library с его новыми данными модели. С другой стороны, я могу получить доступ к https://my-app.com/login через URL, который не имеет данных модели между прочим.

На environment.js у меня locationType: "auto", а мой router.js похож на:

Router.map(function() {
  this.route('login');
  this.route('dashboard', function() {
    this.route('child', {path: '/child/:child_id'});
    this.route('library');
  });
});

Мои маршруты:

// Route: dashboard
import Ember from 'ember';
import RouteHistoryMixin from 'ember-route-history/mixins/routes/route-history';

export default Ember.Route.extend(RouteHistoryMixin, {
    model: function() {
        let userId = this.authentication.getPlayerId();
        let actions =  this.store.findAll('action');
        return Ember.RSVP.hash({
            actions: actions,
            tasks: Ember.RSVP.all([actions]).then((actions) => {
                return this.store.findAll('task')
            }),
            rank: this.store.findAll('rank')
        });
    },
    afterModel: function(){
        this.transitionTo('dashboard.index');   // needless
    },
    setupController(controller, model) {
        this._super(...arguments);
        Ember.set(controller, 'tasks', model.tasks);
        Ember.set(controller, 'rank', model.rank);
    }
    // . . .

И

// Route: dashboard/library
import Route from '@ember/routing/route';
import Ember from 'ember';
import RouteHistoryMixin from 'ember-route-history/mixins/routes/route-history';

export default Route.extend(RouteHistoryMixin, {
    complete: Ember.inject.service(),
    queryParams: {
        taskId: {}
    },
    model(params) {
        if(params.taskId) {
            return Ember.RSVP.hash({
                article: this.store.query('article', { filter: '{"inSyllabus": true}'}),
                task: this.store.query('task', { filter: '{"id": ' + params.taskId + '}'})
            });
        }
        else {
            return Ember.RSVP.hash({
                article: this.store.query('article', { filter: '{"inSyllabus": true}'})
            });
        }
    },
    setupController(controller) {
        this._super(...arguments);
        if (controller.taskId)
            this.store.findRecord('task', controller.taskId).then((task) => {
                controller.set('libraryQueryParam', task.points);
                // Notify Task completion
                let payload = {
                    startDate: new Date(),
                    endDate: new Date(),
                    points: task.points,
                    entries: 1
                };
                // PUT HTTP COMMAND FOR PLAYER
                let playerTask = this.store.createRecord('playTaskTest', payload);
                playerTask.save();
            });
    }
    // . . .

Может быть флаг конфигурации или проблема конфигурации маршрутизатора?

Как я могу получить доступ к этому дочернему маршруту через URL или что-то подобное случилось с кем-то из вас?

1 Ответ

1 голос
/ 13 марта 2019

Я думаю, что проблема в приборной панели.на линии afterModel:

afterModel: function(){
    this.transitionTo('dashboard.index');   // needless
}

Эта часть перенаправляется на dashboard.index каждый раз, когда вы вызываете dashboard маршрут.Помните, dashboard.index - это дочерний маршрут, аналогичный child и library, поэтому вы никогда не достигнете их.

...