Ember v1.6.0beta正在从URL中删除查询字符串 - 无法获取queryParam

时间:2014-03-05 18:56:12

标签: ember.js

Ember似乎正在从网址中删除查询字符串。

我已经完成了代码,我确信我正确设置了标志:

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

但是当我的路由加载时,查询字符串被删除,我无法访问queryParams。

这是我的路由器:

App.Router.map(function () {

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

当我尝试以下网址(which is based on the URL from the guide)时,查询字符串将被删除:[webserver]/#/simplesearch/0?simplesearch[height]=10

当模型首次由路由初始化时,它会构建查询参数,控制器的queryParams属性由路径设置:

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);
    }
});

但是,我也尝试在控制器中明确设置queryParams

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

我不确定我还缺少什么...

这件事真的有用吗?


看来我是个傻哥。

我需要将params参数添加到model()函数:

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

如果我没有明确设置它们,有没有办法在Ember决定没有控制器之前为控制器动态生成queryParams?


另外,我的网址不正确(就像在Ember指南中一样)。应该是:

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

而不是

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

1 个答案:

答案 0 :(得分:1)

在模型钩子中,你需要传递参数。

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

以下是同一行的another question

干杯