2016-11-02 11 views
3

Emberアプリケーションにすべてのコンテンツ(画像など)がロードされているときにJavaScriptを実行します。`onload`に似たEmberイベントがありますか

すでにdidInsertElement()didRender()フックを使用してみましたが、背景画像が読み込まれるのを待たずにいるようです。

export default Ember.Component.extend({ 
    didInsertElement() { 
     this._super(...arguments); 
     Ember.run.scheduleOnce('afterRender', this, function() { 
     var home =$('#main-outlet')[0]; 
     home.className += " homePage"; 
     startTimer(5); 
     }); 
    }, 
}); 

任意の溶液またはこのための別のアプローチを:

は、ここに私のコンポーネントのコードスニペットは次のようになりますか?

+0

[this](http://stackoverflow.com/questions/10385578/is-there-a-way-to-get-a-callback-when-ember-js-has-finished-loading -everything) –

+0

className 'homePage'を追加して、何を達成したいですか?テンプレート内でこの問題を解決できませんか? –

+0

ページがロードされたときにCSSアニメーションを開始したい –

答えて

2

Emberには、onloadに相当するイベントはありません。

しかし、別のアプローチでは、コンポーネント内のdidInsertElementフックと組み合わせて、EmberのエイリアスのエイリアスをjQueryに利用して、実行の順序を達成することができます。これを試してみてください:

export default Ember.Component.extend({ 
    didInsertElement() { 
    Ember.$(window).on('load', this.executeCssAnimations); 
    }, 

    executeCssAnimations() { 
    // your CSS and animation logic would go here 
    Ember.$('.big-background') 
     .text('NOW READY FOR CSS and ANIMATION UPDATES.') 
     .css('color', 'yellow'); 
    }, 

    willDestroyElement(...args) { 
    this._super(...args); 
    Ember.$(window).off('load', 'window', this.executeCssAnimations); 
    }, 
}); 

willDestroyElementフックが同様に含まれている、windowからloadイベントリスナーの適切なティアダウンと除去を表示します。

これを実証するためにEmber Twiddle exampleを作成しました。

+1

'didRender'はすべての再レンダリングで呼び出されます。これは何度も発生する可能性があり、レンダリングが発生するたびにロードリスナーを割り当てたくないことがあります。コンポーネントがDOMに最初に挿入されたとき、つまり、 'didInsertElement'のときにのみ、この操作を行います。 'willDestroyElement'で削除したいかもしれません。 – nem035

+1

@ nem035良いコードレビューをありがとう - これらのリファクタで更新されました。 – jacefarm

関連する問題