2017-01-31 4 views
0

Я реализую аналогичное решение для How is ajax pagination handled in EmberJS? для моей разбивки на страницы.EmberJs pagination, как вернуться на первую страницу?

Как перенаправить на начальную страницу, когда кто-то войдет на страницу без данных? То есть У меня 3 страницы данных, и кто-то входит? Page = 4.

Я попытался изменить queryParams:

if (model.get('length') === 0) { 
    this.transitionTo({queryParams: {page:'0'}}); 
} 

Это прекрасно работает, но возвращает следующее сообщение об ошибке:

TypeError: Cannot read property 'name' of undefined 
    at Class.finalizeQueryParamChange (ember.debug.js:27880) 
    at Router.triggerEvent (ember.debug.js:30355) 
    at Object.trigger (ember.debug.js:50524) 
    at finalizeQueryParamChange (ember.debug.js:49635) 
    at Router.queryParamsTransition (ember.debug.js:49008) 
    at Router.getTransitionByIntent (ember.debug.js:48919) 
    at Router.transitionByIntent (ember.debug.js:49026) 
    at doTransition (ember.debug.js:49603) 
    at Router.transitionTo (ember.debug.js:49096) 
    at Class._doTransition (ember.debug.js:29999) 

А также попытался изменить переменную страницы контроллера:

this.controllerFor('my-controller').set('page', 0); 

Но более поздний эффект не имеет.

Это мой маршрут:

import Ember from 'ember'; 
import AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-route-mixin'; 

export default Ember.Route.extend(AuthenticatedRouteMixin, { 
    queryParams: { 
    page: { 
     refreshModel: true 
    } 
    }, 
    model: function(params) { 
    return this.store.query('model', { 
     page: params.page, 
     limit: params.limit 
    }); 
    }, 
    afterModel: function(model, transition) { 
    const { page=0 } = transition.queryParams; 
    let controller = this.controllerFor('model.list'); 

    // ---> Here is where I put the redirection tries above. 


    (more unrelated code) 
    } 
}); 

И контроллер:

import Ember from 'ember'; 

export default Ember.Controller.extend({ 
    queryParams:['page', 'limit'], 
    page: 0, 
    limit: 25, 
    actions: { 
    nextPage() { 
     this.set('page', this.get('page') + 1); 
    }, 
    prevPage() { 
     if (this.get('page') >= 1) { 
     this.set('page', this.get('page') - 1); 
     } 
    } 
    } 
}); 
+0

Включите код маршрута и контроллера и где вы вызываете 'transitionTo' и где вы вызываете' this.controllerFor ('my-controller'). Set ('page', 0); '?. – kumkanillam

+1

Просто обновил его, не так много, чтобы показать, хотя – pcambra

ответ

1

Ваш подход кажется хорошо, но я предполагаю, что есть опечатка или что-то подобное где-нибудь. this.transitionTo({ queryParams: { page: 0 }) перенаправляет на первую страницу. Проверка model.get('length') === 0 в afterModel перехват и перенаправление, если это правда, также кажется действительным.

Я написал Ember-вертеть, чтобы убедиться, что он работает в базовом сценарии: https://ember-twiddle.com/8bb8cdc068c4faa1cd8c35a0e8ac97f4

afterModel крючок просто:

afterModel(model) { 
    if (isEmpty(model)) { 
     this.transitionTo({ queryParams: { page: 0 }}); 
    } 
    } 

Я не совсем уверен, что если const { page=0 } = transition.queryParams; является допустимым синтаксисом. Раньше я никогда не видел что-то подобное, и я также не уверен, к чему это нужно.

+0

Спасибо за подтверждение, я перевел чек в начало afterModel, и он работает! – pcambra

Смежные вопросы