ngResourceレスポンスでネストされたリソースを解決するためのオプションはありますか?ngResourceネストされたリソースを解決する
ngResourceのネストされたリソースのエンドポイント解決に関するいくつかの関連する質問がありましたが、この質問は、REST応答にクエリ中のコレクションにネストされた2番目のリソース、特に1対1のマッピング例えば持っていないだろうpets/<id>/owner
をそれ自体のリソースとして使用します。
GET /ペット:開発者として
[{
name: 'spark',
type: 'dog',
owner: '/owners/3/' # alternatively just '3' or the full object.
}]
、私は時々、時々私がしたい、全体としてOwner
リソースを照会する
は2つのリソース、Pets
とOwners
があると言いますPet
リソースを照会してから、owner
属性をリソースインスタンスに自動的に解決します。
これは私の現在のソリューションである:ここ
.factory('Pet', function ($resource, Owner) {
var Pet = $resource('/pets/:id', {id: '@id'});
Pet.prototype.getOwner = function() {
return new Owner(this.owner); // or Owner.get({id: this.owner})
}
return Pet;
})
問題点は多いです。誠実さがあります。この実装は、私が信じるように、同じリソースの複数のインスタンスを可能にします。その後、実用性があります。また、(owner
とgetOwner()
の代わりにowner
を追跡する追加の属性があります。モデルを保存したい場合はsetOwner
)。
代替ソリューションはtransformResponse
で構築することができますが、ネストされたマッピングを持つすべてのリソースにそれを含めるにはハック感があります。
だから、あなたがRestangularで何ができるか、.one( '所有者') 'Restangular.one(1 'ペット')を呼び出している。get()は'とすることをロードし、 '/ペット/ 1/owner'私は、それぞれの所有者が '/所有者/'からしかアクセスできないようにするために、それぞれのリソースに対して1つの固有のエンドポイントがあるというパラダイムを探していますが、同時に、異なる所有者の応答にオブジェクトを埋め込むことも可能ですリソース。 – lyschoening
長方形の方法は次のようになります: 'pet.owner = Restangular.restangularizeElement(ペット、ペット所有者、 '所有者')'。 – lyschoening
これは本当に「ネストされた」リソースではなく、単に2つの依存リソースに似ているようです。 「ネストされた」とは、一方が他方から導かれる(ある導出されたURLを意味する)ことを意味する。お互いに依存する2つの別々のリソース(「ペット」と「所有者」)を持つことは異なります。バックエンドサービスにアクセスできますか?バックエンドが他の依存関係をあらかじめ設定しておくと、依存関係が改善されるようですが、それは可能ではないかもしれません。 – tennisgent