2016-05-10 9 views
0

私はEmberJSとRESTful APIのアプリを持っています。問題は、一部のリソースで動的URLが必要なことです。EmberJS - さまざまなモデル用の動的な動的名前空間

たとえば、アドレスは連絡先の一部です(一部の連絡先ID)。だから、APIにアドレスを追加するためのルートは、だから私はエンバーにJSONAPIAdapterのアドレスを照会する

/api/contacts/3/addresses 

です。どうすればうまくできますか?私は以下を使用します:

this.store.adapterFor('application').set('namespace', "api/contacts/3"); 

しかし、それは醜いです、私はすべてのモデルの前にそれを使用する必要があります、そしてそれは本当に悪い解決策です。 JSONAPIAdapter全体を書き直す必要がありますか、それとも他に解決策がありますか?

+0

ダイナミックなことは間違いありません... – TameBadger

答えて

0

これは実際にはJSONAPIではありません。しかし、それを見てみましょう。

これは解決の関係のようです。だからあなたは住所を持っていて、その連絡先を探したい。これの最も簡単なことは、JSONAPIに従うことです。関係のリンクが元の文書で指定されなければならないことは明らかです。連絡先の応答は次のようになります。

{ 
    data: [{ 
     id: 3, 
     type: 'contact', 
     relationships: { 
      addresses: { 
       links: { 
        related: '/api/contacts/3/addresses' 
       } 
      } 
     } 
    }] 
} 

そして、すべての機能がそのまま動作します。 あなたの応答がJSONAPIの直後にない場合は、シリアライザでこれを修正できます。しかし、JSONAPIがまったくない場合はRESTAdapter/RESTSerializerを使用してください。あなたはurlForFindHasManyを上書きすることができます。

+0

私はEmberの別のルートでオブジェクト(連絡先など)をフォローしたい場合は、同じオブジェクトを使用する必要があります。たとえばフィルタリングできますか? –

+0

さて、データ構造によって異なります。全てのレコードを検索したい場合や、指定されたタイプのレコードをすべて検索する場合は、 'findAll'を使用してください。別のモデルに関連するすべてのレコードを検索する場合は、関係を解決します。住所のすべての連絡先と同様。そこでフィルタリングすることはできません。そのためには、フィルタデータとプライマリレコードの両方で 'query'を使用し、アダプタでそれを処理します。 – Lux

関連する問題