2017-01-09 21 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合適的陣列。我應該怎麼做?

我可以看到Mirage返回數據(郵編和包含的房屋)以響應findRecord。

+0

遠景......但是您是否在除已定義的默認商店外還命名了服務「商店」? – sheriffderek

+0

我看不到任何默認商店已經定義,因此在上述組件中命名的默認商店。 – vogomatix

+0

有一些關於Ember的'神奇'的東西是明確注入的,就像有明確的索引路線一樣。你可以在任何地方調用this.store - 或this.get('store')。我會嘗試重命名你的服務,看看事情的行爲是否有所不同。就像上面說的那樣,這是一個很長的過程......如果你使用了燼數據或者其他東西,那麼商店可能只會在那裏......但你應該研究一下。 :) – sheriffderek

回答

1

在餘燼數據中,relationship return Promises。所以你的情況,你可能會改變你的第一個選項有點像下面,

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

記住你的第二個選擇是錯誤的,因爲findRecord回報Prmise,所以你的結果設定Prmoise而不是homes

+0

如果它沒有回答你的問題,那麼你可能需要包括你的模型代碼以及你確認海市蜃樓響應的方式。 – kumkanillam

+0

非常感謝,我認爲第二選擇是錯誤的,但我不明白爲什麼第一個選項不會返回我需要的對象。 – vogomatix

+1

我沒有使用過多的ember-data。只要閱讀指南來回答這個問題。在這個[指南鏈接](https://guides.emberjs.com/v2.10.0/models/relationships/#toc_relationsships-as-promises)中解釋說,在處理關係時,記住他們返回承諾是很重要的。 – kumkanillam