3
votes

I have a problem with queryParams default values in Ember Route. My route class looks like:

export default Ember.Route.extend({
  queryParams: {
    pageNumber: { refreshModel: true },
    pageSize: { refreshModel: true }
  },

  model(params) {
    console.log(params);

    return this.store.query('user', {
      page: {
        number: params.pageNumber,
        size: params.pageSize
      }
    });
  }
});

and controller:

import Ember from 'ember';

export default Ember.Controller.extend({
  queryParams: {
    pageNumber: 'page',
    pageSize: 'limit'
  },

  pageNumber: 1,
  pageSize: 25
});

But if url does not have 'page' and 'limit' query arguments, model hook params have { pageNumber: undefined, pageSize: undefined }. Is there are any way to set deafault values for Route queryParams like for controller queryParams?

1
It's correct what you do. You can see in this twiddle All is ember-twiddle.com/db931cb415d8579c89448f19bfc6accf - Ebrahim Pasbani

1 Answers

6
votes

You can just set the defaults in your router model hook, then you don't need to set them in your controller:

export default Ember.Route.extend({
  queryParams: {
    pageNumber: { refreshModel: true },
    pageSize: { refreshModel: true }
  },

  model(params) {
    params.pageNumber = params.pageNumber || 1;
    params.pageSize = params.pageSize || 25;

    return this.store.query('user', {
      page: {
        number: params.pageNumber,
        size: params.pageSize
      }
    });
  }
});

export default Ember.Controller.extend({
  queryParams: {
    pageNumber: 'page',
    pageSize: 'limit'
  }
});