2016-11-01 9 views
0

Я хочу начать переход css, когда моя страница полностью загружена (включая все фоновые изображения), поэтому я пытаюсь выполнить didRender событие компонента, но оно никогда не будет вызвано. Вот как выглядят мои кодыemberjs didRender не работает

export default Ember.Component.extend({ 
    didRender() { 
     console.log('did render working'); 
     var home =$('#main-outlet')[0]; 
     home.className += " homePage"; 
     startTimer(5); 
    }, 
    willDestroyElement() { 
     console.log("destroying view"); 
     var home = $('#main-outlet')[0]; 
     home.className = " wrap"; 
    } 
}); 

Однако, когда я использую didInsertElement событие мой код работает нормально, но я не могу использовать, как он выполняется перед тем, как загрузка самого изображения Любая идея или альтернативный подход по этому вопросу?

+0

ли это печать 'сделал рендеринга working'?. на боковой ноте для методов жизненного цикла вы можете включить 'this._super (... arguments);'. – kumkanillam

+0

Какую версию ember вы используете? – roger

+0

@kumkanillam ... нет не распечатывается в консоли –

ответ

1

Попробуйте это:

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

didRender работает каждый раз после повторной визуализации. Возможно, вам стоит предпочесть didInsertElement (который работает только один раз) и назначить вам свою функцию.

О: Ember Run

+0

Это сработало, но даже после выполнения Render перед загрузкой всех фоновых изображений. Это как это работает? –

+0

Это нормально. Загрузка изображения может выполняться с помощью события img onload. У меня нет опыта в этом. Но есть некоторые [аддоны] (https://github.com/bustlelabs/ember-cli-image) или [другие способы] (http://stackoverflow.com/questions/7356023/how-to-handle-onload- event-on-img-tag-и-другие), чтобы справиться с этим. – ykaragol