【发布时间】:2017-06-21 01:11:39
【问题描述】:
我有一个在服务器端构建的现有搜索应用程序,它使用由 python/flask 处理的弹性搜索。在客户端,它使用 JS/jQuery 和把手来解析和呈现数据。
我想更进一步并在 ember 中构建它,因为“控件”(过滤器、排序、分页等)使其成为 SPA 的完美候选者。
我了解 ember 基础知识,但我觉得我遇到了 ember-data 的难题 - 即如何将我的数据放入存储中以便我可以绑定操作。有人可以指出我正确的方向吗?
我现有的 JSON API 是这样访问的:
http://localhost:8000/search?q=shirt&paging=18&filter-price=100
它会像这样返回 JSON:
{
"aggregations": {
"breadcrumb": [],
"color": [],
"price": [],
"size_apparel": [],
"size_jewelry": []
},
"meta": {
"agg_list": [],
"default_sort": "",
"key_translations": {},
"paging": 18,
"paging_options": [],
"sort_methods": [],
"from": 0,
"hits": 89,
"pages": 5,
"q": "shirt"
},
"results": [
{
"creation_date": "",
"image": "",
"images": {
"altimg1": "",
"large": "",
"regular": "/",
"small": ""
},
"name": "This Product",
"price": "19.95",
"skuid": "ABC123",
"url": "shirt.html"
},
{...},
{...}
]
}
这是可用的还是我需要重写后端?我已经修改了访问数据并且有一些非常粗糙的工作。我实际上可以看到“结果”数据,但我不知道如何访问“元”和“聚合”数据。我认为这是“sam 有效载荷中的多个模型”并且 RSVP.hash 应该可以工作......但 ember-data 似乎要求每个模型都有一个 id。这对于“结果”模型是有意义的,但对于聚合和元数据绝对不是。
现在我只想让它显示出来。
首先,我的适配器是:
export default DS.RESTAdapter.extend({
host: 'http://localhost:8000',
pathForType() {
return 'search';
}
});
测试控制器是:
export default Ember.Controller.extend({
queryParams: ['q','paging'],
q: 'shirt',
paging: '18'
});
我的“结果”模型是:
const { attr } = DS;
export default Model.extend({
'creation_date': attr('string'),
'has_pricerange': attr('string'),
'image': attr('string'),
'name': attr('string'),
'price': attr('string'),
'skuid': attr('string'),
'url': attr('string')
});
路线:
export default Ember.Route.extend({
model(params) {
return this.store.query('result', {
q: params.q,
paging: params.paging
});
}
});
序列化器:
export default DS.RESTSerializer.extend({
primaryKey: 'skuid'
});
使用 jquery 很容易做到这一点 - 您只需 $.get 然后使用对象表示法访问数据。我知道 ember 不是 jquery,但它似乎应该更容易访问数据。我错过了什么吗?采取错误的方法?我应该从头开始吗?
【问题讨论】:
标签: ember.js ember-data