簡體   English   中英

灰燼-findAll和Promise

[英]Ember - findAll and promises

我在組件中使用findAll有一個小問題。 它涉及到最后返回的值。

users: Ember.computed(function() {
return this.get('store').findAll('user');
}),

就我而言,我想獲取第一個對象的名稱。 所以在我的車把里:

users.firstObject.name

在這種情況下,“用戶”是一個類。 但是我試圖直接返回屬性中的第一個對象,如下所示:

user: Ember.computed(function() {
    return this.get('store').findAll('user')
    .then(function(user){
      return user.get('firstObject');
    });
  }),

但是在這種情況下,在我的車把中,user.name是未定義的,而user是一個承諾。 諾言有一些我無法理解的東西,它們是如何工作的……有人可以幫助我在不對用戶使用“ firstObject”的情況下獲得正確的用戶嗎? 提前致謝 !

解決問題的最快捷方法是安裝ember-promise-helpers插件並將其應用到模板中,如下所示:

{{#if (await user)}}
  {{get (await user) 'name'}}
{{/if}}

但是,盡管仍然可以執行AFAIK,但不建議將promise用作計算屬性的值。 在這里,我將推薦Ember.PromiseProxyMixin文檔 ,以及閱讀一些(盡管是較舊的)論壇主題(例如, 主題)。

我認為您遇到的問題不在於承諾,而是您如何使用計算屬性。

findRecord / findAll的最佳位置是路徑中的模型掛鈎。 最好不要依賴firstObject來描述。 您無法保證在應用程序的后端數據更改時,哪個記錄優先。

計算屬性的真正目的是觀看其他數據並更新有關該數據的顯示信息,而不是自己從商店中獲取東西。 他們需要的參數是應該監視更新的數據的名稱。 由於您的計算屬性沒有監視任何內容,因此它永遠不會觸發。 這是一個例子。

  firstName: null,
  lastName: null,

  fullName: Ember.computed('firstName', 'lastName', function() {
    let firstName = this.get('firstName');
    let lastName = this.get('lastName');

    return `${firstName} ${lastName}`;
  })

您可以在指南中的計算屬性下閱讀更多內容。

如果在路由中定義一個模型掛鈎,以便使用findRecord獲取用戶信息,然后將其傳遞給子組件,或者在不同路線上的許多不同組件需要用戶信息的情況下,將其設置在服務上,那么您的時間將會輕松得多。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM