【发布时间】:2017-06-09 14:55:54
【问题描述】:
我正在尝试构建一个前端 Web 系统,该系统将运行第三方站点数据库和管理控制台。 API 似乎完全依赖于 GET 调用,通过定位特定 URL 来请求或更改信息。
API 返回 XML,示例:
<responseITEMs xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ITEMs>
<ITEM libraryid="e3712df592253fcb4" featured="false" releasedate="2017-24-01 00:00:00" code="ABC001" detail="Some text" name="Dummy One" displaytitle="Dummy One" keywords="" id="1fef760bc1d61c8c" status="active" lastupdated="2016-24-01 04:53:28"/>
<ITEM libraryid="e3712df592253fcb4" featured="false" releasedate="2017-24-01 00:00:00" code="ABC003" detail="Some text" name="Dummy Three" displaytitle="Dummy Three" keywords="" id="3e35wba1d9b32a45" status="active" lastupdated="2016-24-01 04:53:15"/>
<ITEM libraryid="e3712df592253fcb4" featured="false" releasedate="2017-24-01 00:00:00" code="ABC002" detail="Some text" name="Dummy Two" displaytitle="Dummy Two" keywords="" id="cca6f0cab9defe80" status="active" lastupdated="2017-24-01 01:57:37"/>
</ITEMs>
</responseITEMs>
我以前没有使用过 EmberJs,但有人向我建议过。我不确定它是否可以与 XML 一起使用,所以我目前有一个 PHP 脚本在另一个本地服务器上运行,它调用一个固定的 API URL 端点并将响应转换为 JSON:
$Json = json_encode(simplexml_load_string($data));
echo $Json;
我最终得到的 JSON 如下所示:
ITEMs: {
ITEM: [
{
@attributes: {
libraryid: "e3712df592253fcb4",
featured: "false",
releasedate: "2017-24-01 00:00:00",
code: "ABC001",
detail: "Some text",
name: "Dummy One",
displaytitle: "Dummy One",
keywords: "",
id: "1fef760bc1d61c8c",
status: "active",
trackcount: "0",
lastupdated: "2016-24-01 04:53:28"
}
},
{
@attributes: {..... etc
我正在尝试编写一个 Ember 规范化器,这意味着我可以通过 Ember 模板上的项目(实际术语不是 ITEM)运行一个简单的循环。目前是:
import DS from 'ember-data';
export default DS.RESTSerializer.extend({
normalizeResponse(store, primaryModelClass, payload, id, requestType) {
payload = {
ITEM: {
id: payload.ITEMs.ITEM[0]["@attributes"].id,
type: requestType.modelName,
name: payload.ITEMs.ITEM[0]["@attributes"].name
}
};
return this._super(store, primaryModelClass, payload, id, requestType);
}
});
此时,Ember 检查器显示我在“数据”选项卡下获取了 ID 和名称,但我无法将它们放到我的模板中,或者由于硬编码的 ITEM[0],显然检索到的不仅仅是第一个项目。
路线:
export default Ember.Route.extend({
model() {
return this.store.findAll('ITEM');
}
});
型号:
export default DS.Model.extend({
name: DS.attr('string'),
});
模板:
<strong>{{ model.name }}</strong>
<ul>
{{#each model.ITEM as |one|}}
<li>{{one.name}}</li>
{{/each}}
</ul>
显然,我并没有那么远,而且根本不了解 Ember。我乐于接受并希望有更好的解决方案来解决这个问题以及对我当前代码的技术投入。
【问题讨论】:
-
你可以parse XML in JS。
标签: javascript ember.js ember-data javascript-framework