Emberjsのインスタンスイニシャライザー

トマスバシャム

ember-cliアプリケーションを最新のイテレーションに更新するという長いスローガンを乗り越えています。私たちは非常に遅れました。私はインスタンス初期化子が導入された段階にあり、これが現在特定の初期化子を実装した方法を壊そうとしていると感じています。

export function initialize(container, application) {
  var store = container.lookup('store:main');

  // We need a basket to be present when
  // the application loads. Wait for this
  // to happen before continuing.
  application.deferReadiness();

  store.findOrCreateRecord('order', basketToken).then(function(basket) {
    container.register('basket:main', basket, { instantiate: false });
    application.inject('controller:basket', 'model', 'basket:main');

    // Let the application know we have
    // a basket and can continue.
    application.advanceReadiness();
  });
}

現在推奨されているのは、これを「通常の」初期化子に分割してバスケットオブジェクトを登録し、インスタンス初期化子を分割してストアを取得してAPIサーバーを呼び出すことです。ただし、これを行うと、インスタンス初期化子内のレジストリにアクセスして、Promiseから返されたオブジェクトを登録し、それをコントローラーに挿入することができなくなります。私はこれをすべて間違って考えていると思いますが、頭を包むことができませんでした。これを更新することでどのようにすべきか提案はありますか?

愚かな

他の人がイニシャライザーを理解するのを助けるための答えとして、ここに@tomdaleの説明を投稿するのは合理的だと思います。

@tomdale: "定義上、インスタンス初期化子はアプリの起動が完了した後にのみ実行されるため、インスタンス初期化子でアプリの準備を延期することはできません。

アプリケーション起動のセマンティクスに関するサイドバー:「アプリの準備」(、deferReadiness()およびadvanceReadiness())は、アプリケーションのすべてのコードがロードされているかどうかを示します。すべてのコードが読み込まれると、アプリケーションである新しいインスタンスが作成されます。

言い換えると、ブラウザーで実行されているEmberアプリケーションのライフサイクルは次のとおりです。

  1. 残り火がロードされます。
  2. Ember.Applicationインスタンスをグローバルに作成します(例:App)。
  3. この時点では、どのクラスもまだロードされていません。
  4. JavaScriptファイルが評価されるときに、アプリケーションにクラスを登録します(例App.MyController = Ember.Controller.extend(…);)。

  5. Emberは、<script>タグを介し含まれるすべてのJavaScriptがロードされたことを確認するためにDOMの準備ができるのを待ちます

  6. イニシャライザーが実行されます。
  7. コードを遅延ロードする必要がある場合、または追加のセットアップを待つ必要がある場合は、を呼び出すことができますdeferReadiness()
  8. すべてがロードされたら、を呼び出すことができますadvanceReadiness()
  9. この時点で、Application準備ができている言います。つまり、アプリを構成するすべてのクラス(コンポーネント、ルート、コントローラーなど)が読み込まれることをEmberに伝えました。
  10. アプリケーションの新しいインスタンスが作成され、インスタンス初期化子が実行されます。
  11. ルーティングが開始され、UIが画面に表示されます。

実行する必要のあるランタイムセットアップがあるためにUIの表示を遅らせたい場合(たとえば、アプリの実行を開始する前にWebSocketを開きたい場合)、正しい解決策はのbeforeModel/model/afterModelフックを使用することApplicationRouteです。これらのフックはすべて、子ルートが解決されるまで評価されないようにするpromiseを返すことができます。

deferReadiness()イニシャライザでの使用は、多くの人が頼るようになっ不幸なハックです。ルーターのモデルpromiseチェーンとは異なり、エラーやサブステートの読み込みなどを壊すため、これをハックと呼びます。イニシャライザーでレンダリングをブロックすることにより、IMOは、Promiseが遅いか拒否された場合に読み込みまたはエラーのサブステートが表示されず、私が見たほとんどのコードにエラー処理コードがないため、ユーザーのエクスペリエンスが低下します。まったく。これにより、白い画面が空白になり、何か問題が発生したことをユーザーに通知せずにアプリが破損する可能性があります。」

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

インスタンスイニシャライザーのStackOverflowError

分類Dev

イニシャライザーとコンストラクター

分類Dev

c#イニシャライザーとコンストラクター

分類Dev

イニシャライザでルーターインスタンスを取得する方法

分類Dev

「コンビニエンスイニシャライザーに別のイニシャライザーへの「自己」呼び出しがありません」

分類Dev

イニシャライザリストのconst参照メンバーの初期化

分類Dev

コンストラクターと中括弧または等しいイニシャライザーの継承

分類Dev

テンプレートの非静的データメンバーイニシャライザーはいつインスタンス化されますか?

分類Dev

イニシャライザからのRSpecダブル/モックインスタンス変数

分類Dev

SKPhysicsBody用のSwiftコンビニエンスイニシャライザ拡張

分類Dev

nibからのインスタンスを持つUIViewControllerサブクラスの便利なイニシャライザー?

分類Dev

Swift 3:コンビニエンスイニシャライザー拡張財団の「タイマー」がハングアップ

分類Dev

Swiftクラスの指定されたイニシャライザーでインスタンスメソッドを呼び出す

分類Dev

イニシャライザからインスタンスメソッドを実行するときの不思議な「余分な引数」エラー

分類Dev

Swiftクラスのイニシャライザー

分類Dev

Swiftでイニシャライザーまたはコンストラクターを使用する方法

分類Dev

Dartのコンストラクターリストとイニシャライザーリストの違いは何ですか?

分類Dev

C ++でのイニシャライザリストのパフォーマンス?

分類Dev

イニシャライザの静的メンバーのみ

分類Dev

Swift-イニシャライザーを持つ配列のインデックスを取得する方法は?

分類Dev

Swiftサブクラスにコンビニエンスイニシャライザーを追加する

分類Dev

イニシャライザリストでのテンプレート置換エラー

分類Dev

イニシャライザリストのコピー構築

分類Dev

ブレースイニシャライザーを使用して、抽象クラス型を偶然に「インスタンス化」しますか?

分類Dev

シャイニーアプリのスライダーとアクションボタンの活用

分類Dev

コンストラクターのイニシャライザーリストでstd :: unique_ptrのstd :: arrayを初期化することは可能ですか?

分類Dev

イニシャライザーリストとコンストラクターの割り当てと変数の定義

分類Dev

デザインパターン:httpリクエストとプラグイン可能なRedisキャッシングメカニズムの組み合わせ

分類Dev

イニシャライザエラーでインスタンスメンバー 'ref'を使用できません

Related 関連記事

  1. 1

    インスタンスイニシャライザーのStackOverflowError

  2. 2

    イニシャライザーとコンストラクター

  3. 3

    c#イニシャライザーとコンストラクター

  4. 4

    イニシャライザでルーターインスタンスを取得する方法

  5. 5

    「コンビニエンスイニシャライザーに別のイニシャライザーへの「自己」呼び出しがありません」

  6. 6

    イニシャライザリストのconst参照メンバーの初期化

  7. 7

    コンストラクターと中括弧または等しいイニシャライザーの継承

  8. 8

    テンプレートの非静的データメンバーイニシャライザーはいつインスタンス化されますか?

  9. 9

    イニシャライザからのRSpecダブル/モックインスタンス変数

  10. 10

    SKPhysicsBody用のSwiftコンビニエンスイニシャライザ拡張

  11. 11

    nibからのインスタンスを持つUIViewControllerサブクラスの便利なイニシャライザー?

  12. 12

    Swift 3:コンビニエンスイニシャライザー拡張財団の「タイマー」がハングアップ

  13. 13

    Swiftクラスの指定されたイニシャライザーでインスタンスメソッドを呼び出す

  14. 14

    イニシャライザからインスタンスメソッドを実行するときの不思議な「余分な引数」エラー

  15. 15

    Swiftクラスのイニシャライザー

  16. 16

    Swiftでイニシャライザーまたはコンストラクターを使用する方法

  17. 17

    Dartのコンストラクターリストとイニシャライザーリストの違いは何ですか?

  18. 18

    C ++でのイニシャライザリストのパフォーマンス?

  19. 19

    イニシャライザの静的メンバーのみ

  20. 20

    Swift-イニシャライザーを持つ配列のインデックスを取得する方法は?

  21. 21

    Swiftサブクラスにコンビニエンスイニシャライザーを追加する

  22. 22

    イニシャライザリストでのテンプレート置換エラー

  23. 23

    イニシャライザリストのコピー構築

  24. 24

    ブレースイニシャライザーを使用して、抽象クラス型を偶然に「インスタンス化」しますか?

  25. 25

    シャイニーアプリのスライダーとアクションボタンの活用

  26. 26

    コンストラクターのイニシャライザーリストでstd :: unique_ptrのstd :: arrayを初期化することは可能ですか?

  27. 27

    イニシャライザーリストとコンストラクターの割り当てと変数の定義

  28. 28

    デザインパターン:httpリクエストとプラグイン可能なRedisキャッシングメカニズムの組み合わせ

  29. 29

    イニシャライザエラーでインスタンスメンバー 'ref'を使用できません

ホットタグ

アーカイブ