2017-01-09 1 views
1

私は、郵便番号の家のサービスを照会する必要があるコンポーネントを持っています。これは、ユーザが郵便番号を入力したことに応答して選択ドロップダウンリストを設定するためのものです。Ember findRecordとインクルード

だから私はとにかく

export default Ember.Component.extend({ 
    store: Ember.inject.service(), 
    actions: { 
     findHome: function(){ 
      // component declared for promise 
      var component = this; 
      var postcode = this.get('area.postcode'); 
      var store = this.get('store'); 

      // EITHER... 
      var x = store.findRecord('postcode', postcode, {include: 'homes'}) 
       .then(function (area) { 
        component.set('homes', area.homes); 
      }); 

      // OR... 
      var x = store.findRecord('postcode', postcode, {include: 'homes'}) 
      component.set('homes', x.homes); 

     } 
    } 
}); 

を持っているどちらのソリューションは、homesの適切な配列を持っているとして、それは動作しません。私はこれをどのようにしなければならないのですか?

私は、ミラージュがfindRecordに応答してデータ(郵便番号と家を含む)を返すのを見ることができます。

+0

ロングショット...既に定義されているデフォルトストアに加えて、サービス 'ストア'に名前を付けましたか? – sheriffderek

+0

すでに定義されているデフォルトのストアは表示されません。そのため、上記のコンポーネントに名前が付けられています。 – vogomatix

+0

明示的なインデックスルートと同様に、Emberには明示的に注入されるいくつかの「魔法」があります。 this.store - またはthis.get( 'store')をちょうどどこでも呼び出すことができます。私はあなたのサービスの名前を変更しようとすると、物事が異なるかどうかを確認します。言われたように、それは長い撃ちです...そして、店はエバーデータや何かを使うならばそこにしかないかもしれませんが、それを調べるべきです。 :) – sheriffderek

答えて

1

ember-dataでは、relationship return Promisesです。ので、あなたの場合には、あなたは

store.findRecord('postcode', postcode, {include: 'homes'}) 
    .then(function (area) {     
     area.get('homes').then((result)=>{ component.set('homes',result); 
     }); 
    }); 

はあなたの2番目のオプションを覚えて、少し下のようなあなたの最初のオプションが変更される場合がありますfindRecordリターンPrmiseいるので、間違っているので、あなたは、homesにPrmoise代わりの結果を設定しています。

+0

あなたの質問に答えられない場合は、モデルコードと奇跡の応答を確認する方法を含める必要がありますか? – kumkanillam

+0

おかげさまで、2番目の選択肢が間違っていると思っていましたが、最初のものが必要なオブジェクトを返さない理由を理解できませんでした。 – vogomatix

+1

私はember-dataをあまり使わなかった。ガイドを読んでこの質問に答えてください。この[guide link](https://guides.emberjs.com/v2.10.0/models/relationships/#toc_relationships-as-promises)では、関係を扱う際に約束を返すことを覚えておくことが重要です。 – kumkanillam

関連する問題