如何在Parmeterized查询后导航回来

时间:2015-10-21 13:46:26

标签: ember.js ember-data query-string

我有一条主路线/projects,可以从API中获取一些记录:return this.store.findAll('project', {reload: true});此页面上还有一个搜索框,它会点击相同的API,但会显示查询参数:{{1显然,这会将地址栏中的URL更改为return this.store.find('project', params);,并且仅显示从查询返回的记录。路线和模板不会改变,我只是想换掉模型数据。

我的路线代码:

/projects?q=acme

我的问题是,当你从这个查询导航回来时,它会显示所有记录,首先点击页面加上搜索到的记录,当我想要它真正做的只是要求时来自API的默认数据。我不想使用不正确的术语,但我认为我想要的是重新加载商店,但让 model: function(params) { if (params.q) { return this.store.find('project', params); } else { return this.store.findAll('project', {reload: true}); } }, queryParams: { q: { refreshModel: true } }, 似乎没有任何区别。

清除查询参数时如何从商店重新加载?

更新:我确认{reload: true}确实发出了另一个API调用,但问题仍然是商店保留以前的内容,而不是使用响应来重新加载商店从头开始。因此,我在我的代码中有这个,但是当从refreshModel: true的子路径回到projects时会产生问题。

/projects

1 个答案:

答案 0 :(得分:1)

您可以使用路由的queryParams,以便在查询更改时重新加载:

App.SomeRoute = Ember.Route.extend({
  queryParams: {
    q : {
      refreshModel: true
    }
  },
  model : function (params) {
    if (params.q) {
      return this.store.find('project', params);
    } else {
      return this.store.findAll('project', {reload: true});
    }
  }
});

请注意,如果这个简单的解决方案不起作用,queryParam可以使用各种其他选项,以及各种其他调整。以下是进一步阅读:http://guides.emberjs.com/v1.10.0/routing/query-params/