2017-01-24 3 views
2

Je tente de construire un système Web frontal qui fonctionnera à partir d'une base de données de sites tiers et d'une console d'administration. L'API semble être entièrement dépendante des appels GET, demandant ou modifiant des informations en ciblant des URL spécifiques.Comment analyser correctement le contenu de l'API XML dans EmberJS?

L'API retourne XML, par exemple:

<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> 

Je ne l'ai pas utilisé EmberJs avant, mais il m'a été suggéré. Je ne suis pas sûr qu'il est possible d'utiliser avec XML, j'ai donc actuellement un script PHP en cours d'exécution sur un serveur local différent qui vous appelle un paramètre d'URL API fixe et la conversion de la réponse à JSON:

$Json = json_encode(simplexml_load_string($data)); 
echo $Json; 

Le JSON je finis avec ressemble à ceci:

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 

Je suis en train d'écrire un normalisateur Ember qui signifie que je peux courir une simple boucle à travers les éléments (terme réel n'est pas ITEM) sur un modèle Ember. À l'heure actuelle, il est:

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); 
    } 
}); 

A cet inspecteur point de Ember montre que je reçois l'identification et le nom sous l'onglet Données, mais je ne peux pas les mettre sur mon modèle, ou récupérer évidemment plus que le premier élément en raison à l'ITEM codé en dur [0].

Route:

export default Ember.Route.extend({ 
    model() { 
    return this.store.findAll('ITEM'); 
    } 
}); 

Modèle:

export default DS.Model.extend({ 
    name: DS.attr('string'), 
}); 

Modèle:

<strong>{{ model.name }}</strong> 

<ul> 
    {{#each model.ITEM as |one|}} 
    <li>{{one.name}}</li> 
    {{/each}} 
</ul> 

Il est évident que je ne suis pas loin le long et ne savent pas bien Ember du tout. Je suis ouvert à et j'apprécierais de meilleures solutions pour aborder ceci ainsi que la contribution technique vers mon code actuel.

+0

Vous pouvez [analyser XML JS] (https://api.jquery.com/jQuery.parseXML/). – Lux

Répondre

1

Si vous utilisez php-script, vous pouvez convertir XML pour corriger la réponse côté PHP, pourquoi utiliser le sérialiseur pour cela?

Une autre solution serait de créer un nouvel adaptateur et un sérialiseur pour travailler avec des réponses XML sans conversion php.

Vous pouvez trouver ce lien utile: https://bendyworks.com/blog/old-new-soap-ember-js

+0

Je n'ai pas travaillé avec SOAP depuis longtemps, donc ce n'est pas aussi utile pour moi ces derniers temps, mais cet article du lien est à lire absolument si vous travaillez avec WCF et des choses plus anciennes, tout en ayant un client dans Ember – MilkyWayJoe