所以我有这个模型的路线:
model() {
var self = this;
return RSVP.hash({
comptes : this.get('store').findAll('compte'),
contrats:
this.get('store').findAll('contrat').then(function(contrats) {
return contrats.filterBy("contrat_fk.id",
self.get('currentContract.contrat.id'));
}),
})
}
我的目标是使用我的服务currentContract提供的值过滤模型contrat。
重新加载页面时工作正常,但是当我更改路径并返回到此路径时,模型似乎无法加载,我必须重新加载页面才能看到它。
我真的不想使用查询参数并将合同ID放在网址中
答案 0 :(得分:1)
将过滤器逻辑移动到控制器中的计算机属性。然后,当依赖关键字正确时,一切都会正常工作。
例如,在您的路线中,您可以执行此操作:
model() {
return this.store.findAll('contrat');
}
然后在你的控制器中:
currentContract: service(),
filteredContracts: computed('currentContract.contrat.id', 'model.@each.id', {
get() {
const cci = this.currentContract.contrat.id;
return this.model.filter(c => c.id === cci);
}
}),
要小心:此代码使用.
作为getter,适用于ember 3.1
。对于旧版本,您需要使用.get()
。