2017-12-24 11 views
0

計算されたプロパティが存在しない場合はレコードを作成しようとしていますが、計算されたプロパティをレンダリングしようとするとjQuery.Deferred exceptionが得られます。ここでEmber-data:レコードが存在しない場合は作成しますか?

は、私がこれまで持っているものです。

deadlineDay: computed(function() { 
    const oneWeekFromNow = moment().startOf('day').add(1, 'week'); 
    const store = this.get('store'); 

    return store.queryRecord('deadline-day', { 
    filter: { 
     date: oneWeekFromNow 
    } 
    }).then(result => { 
    if (!result) { 
     result = store.createRecord('deadline-day', { 
     date: oneWeekFromNow 
     }); 

     result.save(); 
    } 

    return result; 
    }); 
}), 

は、その後、私はシンプルなヘルパーでレンダリングしようとしてる私のテンプレートで:

{{display-date deadlineDay.date}} 

{{display-date}}ヘルパーはちょうどreturn date.format('dddd, MMM Do')

を呼び出しますEmberは、それが解決するのを待つのではなく、約束自体をレンダリングしようとしているようです。

これは、.formatが約束の方法ではないため、エラーになります。

これは非常に一般的な使用事例ですが、私は理解が鈍っていると思います。大いに助けになりました!

私はそれが関連しているかどうかわからないんだけど、私のバッキングストアはember-local-storage

答えて

1

私はエンバーが約束自体の代わりに、約束を解決するのを待つをレンダリングしようとすることができることに同意を経てのsessionStorageです。残念ながら、現時点ではエラーを再現できません。

Ember.jsでは、通常、データファイルをルートファイルに配置することをお勧めします。これにより、テンプレートファイルがロードされる前に、クエリ/保存および他のすべてのデータ収集が行われます。あなたの描かれた計算されたプロパティは、依存するキーを示さないので、あなたのシナリオのルートファイルへの呼び出しを移動することが正当なものになります。

ジェネリックroute.js例:

import Ember from 'ember'; 

export default Ember.Route.extend({ 
    async model() { 
    let record; 
    record = await this.store.queryRecord('record', { queryParams }); 

    if (!record) { 
     record = this.store.createRecord('record', { properties }); 
    } 

    return record.save(); 
    }, 

}); 

計算されたプロパティ内の約束は、使用のある場合には、エンバー点火の著者は価値があるかもしれませんいくつかの追加の有用な指針を有することができます。 The Guide to Promises in Computed Properties

関連する問題