当模型返回store.queryRecord时刷新呈现的模板

时间:2016-03-19 00:33:10

标签: ember.js ember-data

我有一个显示5个类别的路线。每个类别仅限一个孩子。我创建了一个子路由并将选定的类别类型id作为queryparamter传递。在子路由模型()中,我使用带有store.queryRecord()的参数来查询后端,以返回与该类型匹配的记录或者不返回任何内容。只要记录存在,这似乎工作正常。我遇到的问题是如果我选择一个没有子记录的类别。当queryRecord没有返回任何内容时,模板将继续显示以前的数据。我可以看到网络请求成功完成,它返回一个空数组。如果我刷新页面,模板会正确显示没有模型数据。

当模型不再有记录时,我一直在努力寻找一种刷新模板的方法。我有一种感觉,我会倒退,我会感激任何指针。

父:

export default Ember.Route.extend(AuthenticatedRouteMixin,{
  user: Ember.inject.service('user'),

  model() {
    var user = this.get('user');
    return this.store.findAll('strategic-priority',{ location: user.get('selectedLocationId'), year: user.get('selectedYearId') });
  }
});

HBS
{{#each model as |strategic-priority|}}
    {{#link-to 'priority-area.goal' (query-params priorityArea=strategic-priority.id) class="list-group-item"}} {{strategic-priority.label}} - {{strategic-priority.text}} {{/link-to}}
{{/each}}

子:

export default Ember.Route.extend({
  user: Ember.inject.service('user'),
  queryParams: {
    priorityArea: {
      refreshModel: true,
      replace: false,
    }
  },

   model(params) {
     Ember.Logger.debug(params); //I see this is in the console so I know this code is being called each time
     var user = this.get('user');
    return this.store.queryRecord('goal',{ location: user.get('selectedLocationId'), year: user.get('selectedYearId'),priority:  params.priorityArea});
 }
});

2 个答案:

答案 0 :(得分:0)

您可以尝试使用{{#if hasModel}}包装显示类别的模板。像

这样的东西
{{#if hasModel}}
  ... your template ...
{{/if}}

然后在路径的控制器中

hasModel: Ember.computed.notEmpty('model')

答案 1 :(得分:0)

我不知道这是否是正确答案,但我的解决方法是将模型更改为使用store.query而不是queryRecord。在我的模板中,我做了{{#each model as | xx |}},尽管我只期望一条记录。

在大多数情况下,我也可以通过使用hasMany来避免这种情况。在后端收集数据有点麻烦(至少在我的技能水平上使用php和zf2),但最后看起来效果还不错。

感谢您的建议。