2017-01-24 7 views
2

サードパーティのサイトデータベースと管理コンソールから実行されるフロントエンドWebシステムを構築しようとしています。 APIは、特定のURLをターゲットにして情報を要求または変更するGET呼び出しに完全に依存しているようです。EmberJSにXML APIコンテンツを正しく解析する方法は?

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で使用することが可能ですよく分からないので、私は現在、固定されたAPIのURLエンドポイントを呼び出して、JSONへの応答を変換しています別のローカルサーバー上で実行されているPHPスクリプトを持っている:

$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 

私はエンバーテンプレートに(実際の用語は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); 
    } 
}); 

この時点で、エンバーの検査官は、私がデータ]タブの下に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> 

もちろん、私はそこまでに沿っていないですし、まったくうまくエンバーを知りません。私は現在のコードに対する技術的なインプットと同様に、この問題に取り組むためのより良い解決策を理解しています。

+0

あなたは(https://api.jquery.com/jQuery.parseXML/)[JSでXMLを解析]することができます。 – Lux

答えて

1

php-scriptを使用している場合は、PHP側で正しい応答にXMLを変換できます。なぜこのためにシリアライザを使用しますか?

その他の解決策は、php-convertionを使用しないXML応答で動作する新しいアダプタとシリアライザを作成することです。

あなたは、このリンクが役立つことがあります。https://bendyworks.com/blog/old-new-soap-ember-js

+0

私は長い間SOAPを使っていませんでしたので、最近は私にとって有用ではありませんが、Emberにクライアントを置いている間にWCFや古いもので作業している場合はリンクからの記事を読む必要があります – MilkyWayJoe

関連する問題