我试图过滤一些硬编码的数据在一个ember路线,这是由海市蜃楼提供,并有麻烦。
Ember要么抱怨我的语法(当试图在商店上使用filter
时),要么当我使用findAll
,然后在对象上使用JS过滤器方法时,它不返回任何数据。
尝试1 -使用findAll():
路线
export default Ember.Route.extend({
model() {
return {
txSites: this.get('store').findAll('site').filter((site) => {
return site.siteType === 'tx';
})
};
}
});
模板
<select class="form-control">
{{#each model.txSites as |site|}}
<option value="{{site.id}}">{{site.name}}</option>
{{/each}}
</select>
Mirage端点
this.get('/sites', () => {
return {
data: [{
type: 'site',
id: 1,
attributes: {
name: 'London',
siteType: 'tx'
}
},
{
type: 'site',
id: 2,
attributes: {
name: 'Bristol',
siteType: 'rx'
}
}]
}
});
结果
成功的请求:GET /站点对象{数据:数组[2]}
但是没有任何东西绑定到下拉列表(我没有尝试过滤结果的其他调用工作正常)。
尝试#2:使用filter
:
export default Ember.Route.extend({
model() {
return {
txSites: this.get('store').filter('site', (site) => {
return site.siteType === 'tx';
})
};
}
});
结果
未调用API
尝试#3:使用过滤器
export default Ember.Route.extend({
model() {
return {
txSites: this.get('store').filter('site', { siteType: 'tx' }, (site) => {
return site.siteType === 'tx';
}).then((results) => { return results })
};
}
});
结果
成功的请求:GET /站点?站点类型=tx对象{数据:数组[2]}
但没有数据绑定到选择项。
我觉得我在这里缺少了一些基本的东西。使用ember 2.5和ember data 1.13。
是否有推荐的方法来处理此问题?
编辑:
尝试#4 - findAll与RSVP哈希:
路线
export default Ember.Route.extend({
model() {
return Ember.RSVP.hash({
oneThing: this.store.findAll('oneThing'),
anotherThing: this.store.findAll('anotherThing'),
txSites: this.store.findAll('site').filter((site) => {
console.log(site);
return site.siteType === 'tx';
})
});
}
});
结果
对oneThing
和anotherThing
的调用都绑定成功,但txSites
没有。
作为进一步的测试,我从txSites
属性中删除了.filter
,这很好地返回了整个数据集,绑定正常(所以我很高兴是过滤器导致了问题,绑定也正常)。
尝试#5
路线
export default Ember.Route.extend({
model() {
return Ember.RSVP.hash({
oneThing: this.store.findAll('oneThing'),
anotherThing: this.store.findAll('anotherThing'),
txSites: this.store.findAll('site')
.then(results => results.filter((site) => {
return site.siteType === 'tx';
}))
});
}
});
结果
未返回任何数据,控制台记录筛选器内的site
似乎是一个承诺,而不是已解析承诺的结果。
2条答案
按热度按时间6fe3ivhb1#
您应该在'findAll' promise解析后进行筛选,如下所示:
在Mirage中,您还应使用 Jmeter 化值,因此使用'site-type'而不是siteType。
qf9go6mv2#
您没有从模型函数正确返回数据。请按以下方式操作。
然后在模板中将其用作:
更新:
我建议您改为查询商店:
更新2:
你可以在
afterModel
钩子内过滤txSites,在那里所有来自模型钩子的承诺都将被解析。