【问题标题】:How to properly parse XML API content into EmberJS?如何将 XML API 内容正确解析为 EmberJS?
【发布时间】: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。我乐于接受并希望有更好的解决方案来解决这个问题以及对我当前代码的技术投入。

【问题讨论】:

标签: javascript ember.js ember-data javascript-framework


【解决方案1】:

如果你使用 php-script,你可以在 PHP 端将 XML 转换为正确的响应,为什么要使用序列化器呢?

其他解决方案是创建新的适配器和序列化程序以在没有 php 转换的情况下处理 XML 响应。

您可能会发现此链接很有用:https://bendyworks.com/blog/old-new-soap-ember-js

【讨论】:

  • 我已经很长时间没有使用 SOAP,所以它最近对我来说没那么有用了,但是如果你正在使用 WCF 和旧的东西,那么链接中的那篇文章是必须阅读的,而在 Ember 中拥有客户
猜你喜欢
  • 2016-12-17
  • 1970-01-01
  • 1970-01-01
  • 2013-08-30
  • 2016-05-05
  • 1970-01-01
  • 1970-01-01
  • 2011-05-11
  • 1970-01-01
相关资源
最近更新 更多