1

Ember seems to be removing the query string from the URL.

I've stepped through the code, and I know for sure that I'm setting the flag correctly:

<script>
    ENV = {FEATURES: {'query-params-new': true}};
</script>
<script src="js/libs/ember.prod-1.6.0beta+canary.js"></script>

But when my route loads, the query string is being removed, and I can't access the queryParams.

Here's my router:

App.Router.map(function () {

    this.resource('simpleSearch', {path: 'simplesearch'}, function () {
        this.resource('simpleSearchOption', {path: ':simpleSearchOption_id'});
        this.resource('simpleSearchResults', {path: 'results'});
    });
});

When I attempt the following url (which is based on the URL from the guide), the query string is stripped: [webserver]/#/simplesearch/0?simplesearch[height]=10

When the model is first initialized by the route, it builds out what the query parameters will be, and the controller's queryParams property is set by the route:

App.SimpleSearchRoute = Ember.Route.extend({
    model: function () {
        var optionsForSimpleSearchModel = [];
        for (var i = 0; i < App.SimpleSearchOptions.length; i++) {
            optionsForSimpleSearchModel[i] = App.SimpleSearchOption.create(App.SimpleSearchOptions[i]);
        }

        return App.SimpleSearch.create({
            'simpleSearchOptions': optionsForSimpleSearchModel,
            'numOfOptions': App.SimpleSearchOptions.length
        });
    },
    setupController: function (controller, model) {
        console.log(model.get('queryParams'));
        controller.set('queryParams', model.get('queryParams'));
        controller.set('model', model);
    }
});

BUT, I've also tried explicitly setting the queryParams in the controller:

App.SimpleSearchController = Ember.ObjectController.extend({
    height: null,
    queryParams: ['height'],
...

I'm not sure what else I'm missing...

How does this thing really work?


It seems that I'm a silly dude.

I needed to add the params argument to the model() function:

model: function (params) {
    console.log(params);
    //{height: null} when queryParams['height'] is explicitly set in the controller

Is there any way that I can dynamically generate the queryParams for the controller before Ember decides there are none, if I don't set them explicitly?


Also, my URL was incorrect, (as is the one in the Ember guide). It should have been:

[webserver]/#/simplesearch/0?height=10

instead of

[webserver]/#/simplesearch/0?simplesearch[height]=10

Nathan Lutterman
  • 1,855
  • 4
  • 23
  • 38

1 Answers1

1

In your model hook you need to pass in the params.

App.SimpleSearchRoute = Ember.Route.extend({
    model: function (params) {
        return this.store.findQuery('simpleSearch', params);
    }
});

Here is another question along the same lines.

Cheers

Community
  • 1
  • 1
kiwiupover
  • 1,782
  • 12
  • 26
  • Yes, thank you. I did indeed discover that. It's not specified in the guide that it needs to be set. It mentions explicitly: "Support for query parameters is built right into controllers, unlike other aspects of the URL which are specified and managed entirely at the router level."... leading me to believe that I did not have to touch the Route. – Nathan Lutterman Mar 05 '14 at 19:22