2017-01-31 26 views
0

我正在爲我的分頁實施類似How is ajax pagination handled in EmberJS?的解決方案。EmberJs分頁,如何返回到第一頁?

當有人進入沒有數據的頁面時,我將如何重定向到初始頁面?即我有3頁數據,有人進入?頁面= 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') === 0afterModel鉤子和重定向如果它真的似乎也有效。

我已經寫了灰燼,玩弄,以確保它的工作的基本情況:https://ember-twiddle.com/8bb8cdc068c4faa1cd8c35a0e8ac97f4

afterModel鉤很簡單:

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

我不肯定是否const { page=0 } = transition.queryParams;是有效的語法。從來沒有見過這樣的事情,我也不確定它應該驗證什麼。

+0

感謝您的確認,我將支票移至了afterModel的開頭,它的工作原理! – pcambra