说我的路线中有以下代码:
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数据中,但组件中的计算属性不会更新。
有没有办法获取新记录,以便模型属性更新?
答案 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 segments或query params方法采用路径。