Ember JS - 在路由加载后获取记录时更新模型属性

时间:2017-10-12 14:16:37

标签: javascript ember.js

说我的路线中有以下代码:



model() {
  return this.get('store').query('post', { author: 'John' });
},

actions: {
  fetchNewPosts: function() {
    this.get('store').query('post', { author: 'Sally' });
  }
}




然后是组件中的以下内容:



modelSubset: function() {
  return this.get('model').slice(0, 10);
}.property('model', 'model.@each'),




当输入路线时,组件中的计算属性更新,而作者" John"在模型钩子中获取。

但是,如果我稍后触发操作fetchNewPosts,则会获取记录并将其添加到Ember数据中,但组件中的计算属性不会更新。

有没有办法获取新记录,以便模型属性更新?

2 个答案:

答案 0 :(得分:1)

kumkanillam所述,我需要使用查询参数来实现这一点。以下是我的新模式:

将“author”定义为控制器中的查询参数。

queryParams: ['author',],
  author: "John",

在路径中的模型钩子中,params.author从控制器中获取值。在fetchJobs操作中,我使用transitionTo更新查询参数。

model(params) {
    return this.get('store').query('posts', { author: params.author });
},

actions: {
  fetchJobs: function(authorName) {
    this.transitionTo({ queryParams: { author: authorName }});
  }
},

以下代码会导致模型在查询参数更改时更新。

queryParams: {
  author: {
    refreshModel: true
  }
}

答案 1 :(得分:0)

这里您没有更改model属性,因此计算属性不会运行。 因此,您需要更新model属性

fetchNewPosts: function() {
    this.get('store').query('post', { author: 'Sally' }).then(result=>{
      this.set('model',result);
     });
  }

您的计算属性相关键应包含模型model.@each.propertyName中的任何属性。

注意:在您的情况下,我更倾向于使用dynamic segmentsquery params方法采用路径。