2016-11-02 5 views
3

Я хочу выполнить JavaScript, когда весь контент (например, изображения) был загружен в моем приложении Ember.Есть ли какое-нибудь событие Ember, подобное `onload`

Я уже пробовал использовать 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

взгляните на [это] (http://stackoverflow.com/questions/10385578/is-there-a-way-to-get-a-callback-when-ember-js-has-finished-loading -все) –

+0

Что вы хотите достичь, добавив className 'homePage'? Не можете ли вы устранить эту проблему в своем шаблоне? –

+0

Я хочу начать анимацию css при загрузке страницы. –

ответ

2

У Ember не было события, эквивалентного onload.

Однако в отношении альтернативного подхода вы можете использовать псевдоним Ember для jQuery в сочетании с крюком didInsertElement в вашем компоненте, чтобы достичь порядка выполнения, который вы ищете. Попробуйте это:

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 крючка был включен, а также, чтобы показать правильный и демонтаж удаление слушателя load событий от window.

Я создал Ember Twiddle example, чтобы продемонстрировать это для вас.

+1

'didRender' вызывается при каждом повторном рендеринге, что может произойти много раз, и вы, вероятно, не хотите назначать загрузчика при каждом выполнении рендеринга. Вы только хотите это сделать, когда компонент сначала вставлен в DOM, то есть в 'didInsertElement'. Вы также можете удалить его в 'willDestroyElement' – nem035

+1

@ nem035 Спасибо за хороший обзор кода - обновлен с этими рефакторами. – jacefarm