0

imagesLoaded と Isotope という 2 つのサードパーティ ライブラリを統合するコンポーネントがあります。

ブラウザー モードと cli モードでテストを実行すると、競合するテスト エラーが発生します。エラーは次のとおりです。

Error: Assertion Failed: You have turned on testing mode, which disabled the run-loop's autorun. You will need to wrap any code with asynchronous side-effects in a run

また

TypeError: 'undefined' is not an object (evaluating 'self.$().isotope')

コールバックを ember 実行ループでラップしようとすると、cli モードではパスしますが、ブラウザ モードでは失敗します。なかなかいい組み合わせが見つからない。この問題は、imagesLoaded のコールバックで発生しているようです。そのプラグインを削除すると、問題なく通過するようです。

複数の組み合わせを試しましたが、これが私の最新のコードです。このコンポーネントで実行ループを適切に使用する方法について誰かが洞察を持っている場合、それは役に立ちます。

handleLoad: function() {
  let self = this;

  Ember.run.scheduleOnce('afterRender', this, function(){      
    self.$().imagesLoaded( function() {

        Ember.run(function() {
          self.$().isotope({itemSelector: ".card-container"});
          self.$().isotope('shuffle');
        });

    }); // imagesLoaded
  }); // Ember.run

}.on('didInsertElement')
4

1 に答える 1

0

既存のコードを

Ember.run(function () {
//  Ember.run.scheduleOnce('afterRender....
});

これは Ember に実行ループの開始位置と終了位置を伝えるためです。本番環境/開発環境では、これは Ember 自体によって行われますが、テストではラップする必要があります。

別の方法として、実行ループを明示的に呼び出して手動で開始および終了することもできます ( API ドキュメントを参照してください)。

Ember.run.begin() // <-- tell Ember that your starting a run loop

//Ember.run.scheduleOnce('afterRender', ...
//more ember run loops here

Ember.run.end(); // <-- tell Ember that the run loop ends here
于 2015-05-26T06:23:18.973 に答える