Nathan Lutterman
Nathan Lutterman

Reputation: 1885

Ember v1.6.0beta is removing the query string from the URL - Cannot get queryParam

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

Upvotes: 1

Views: 1715

Answers (1)

kiwiupover
kiwiupover

Reputation: 1780

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

Upvotes: 1

Related Questions