2

ストアを埋めるためにストラップの ember-data をブートするのに最適な場所はどこですか?

現在、ember-data のリビジョン 13 を使用しています。

現時点では、ApplicaitonRoute でこれを試しています。

App.ApplicationRoute = Ember.Route.extend
  setupController: ->
    App.Contact.find().then (contacts) ->
      console.log contacts.get('length')

私が見つけたのは、上記の console.log ステートメントがログに 0 を記録することですが、次に入力した場合:

App.Contact.find().get('length')

コンソールに入力すると、長さは予想どおりです。つまり、0 より大きいです。

何が起こっているのか混乱しています。記録が実現するまで約束は解決されないと思っていたでしょう。

私はコードを調べましたが、json はシリアライザーで解析され、最初に長さが 0 である理由がわかりません。

残りのアダプターを介してバックエンド ストアに接続する場合にのみ発生するため、このためのフィドルを作成することはできません。

4

2 に答える 2

1

github で問題を作成した後、この回答を得ました。

実際、DS.Model.find() は、recordarray がロードされる (つまり、その isLoaded プロパティが true である) ときに解決される「promistified」RecordArray を返します。問題は、配列が作成されるとすぐに DS.Model.find() がロードされ、結果として約束が解決されることです。

問題を解決するには (ライブ配列を返したいと思うため)、次のようなものが機能するはずです。

App.Contact.find({}).then(contacts) ->
   return App.Contact.all()

このように、フードの下では、配列の作成時ではなく、バックエンドがレコードを返すときに読み込まれる findQuery を呼び出しています。

于 2013-05-31T21:08:59.610 に答える