Ember transitionTo queryParams不更新模型或URL

时间:2018-06-04 15:28:49

标签: javascript ember.js ember-query-params

我正在尝试使用queryParams来更新和刷新模型。我已经设置了使用route-action的操作,因为触发操作的更改事件位于组件中。我已安装ember-route-action-helper并且更改事件正常,但transitionTo未更新。

filter-list.hbs

<input type="checkbox"
  class="filter-checkbox inp-{{value.filterValueId}}"
  value="{{value.filterValueId}}"
  onchange={{route-action "updateQuery" value.filterValueId list.filterId}}>

routes/results.js

export default Ember.Route.extend({

queryParams: {
  status: {
    refreshModel:true
  },
  owner: {
    refreshModel:true
  }
},

params: null,

model(params) {
  this.set('params', params);
  return Ember.RSVP.hash({
    result: this.store.query('result', params),
    filter: this.store.findAll('filter'),
    params: params,
  });
},

setupController(controller, model) {
  this._super(...arguments);
  controller.set('result', model.result);
  controller.set('filter', model.filter);
  controller.set('params', model.params);
},

actions: {
  newParams(data){
    console.log("Received", data);
  },
  updateQuery: function() {
    //I make a URL string here from multiple checkboxes
    //and parse the URL string as a JSON object which is
    //modeled the same as a normal queryParameter
    let newParams = JSON.parse('{"' + decodeURI(urlString).replace(/"/g, '\\"').replace(/&/g, '","').replace(/=/g,'":"') + '"}')
    console.log(newParams);
    this.transitionTo({queryParams: {newParams}});
  }
}

因此,我首先从URL中提取params并将其发送以获取结果,并填充过滤器列表(带有过滤器名称的复选框列表)。每次我点击过滤器时,如果它看到复选框已更改,则会使用updateQuery触发路径下的route-action操作。

操作运行(我在控制台中得到了正确的newParams输出。无效的行是this.transitionT()。转换没有做任何事情。它不是更新模型,它不是没有改变URL。

我错过了什么?

1 个答案:

答案 0 :(得分:1)

对于任何想知道的人,我都想到了这一点。

现在,我将{queryParams: {newParams}}发送到transitionTo功能。但是这会将newParams变成一个键,其中所拥有的对象就是值,而不是使用newParams作为完整对象。

我已将此更改为{queryParams: newParams}所以现在它将变量用作对象,而不是密钥。

this.transitionTo({queryParams: newParams});