我正在尝试使用queryParams更新和刷新模型。我将其设置为使用route-action的动作,因为触发该动作的change事件在组件内。我已经安装了ember-route-action-helper并且change事件运行正常,但是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,什么也没做。

我想念什么?

最佳答案

对于任何想知道的人,我都知道了。

现在,我正在将{queryParams: {newParams}}发送到transitionTo函数。但这将newParams变成了一个键,在那里它持有的对象才是值,而不是将newParams用作完整对象。

我将其更改为{queryParams: newParams},因此现在它使用变量作为对象,而不是键。

this.transitionTo({queryParams: newParams});

10-04 16:08