2014-02-13 2 views
0

Привет, я использую Ember app kit, и мне нужно стрелять didInsertElement каждый раз, когда я менял маршрут (детский вид - вид в розетке). Мне нужно что-то вроде глобального приложения DOM.Ember app kit Application view didInsertElement только один раз

Я нашел mavilein's solution, но он не работает.

Вот мой app/views/application.js:

export default Ember.View.extend({ 
    didInsertElement : function(){ 
     this._super(); 
     Ember.run.scheduleOnce('afterRender', this, this.afterRenderEvent); 
    }, 
    afterRenderEvent : function(){ 
    // implement this hook in your own subclasses and run your jQuery logic there 
    console.log("FIREEEEE"); 
    } 
}); 

При запуске приложения он запускает didInsertElement, но когда я изменить маршрут (нажмите на ссылке) оно не приводит к включению виду программы didInsertElement события.

Я знаю, что вид приложения не меняется, но мне нужно что-то, что срабатывает каждый раз, когда я меняю вид ребенка. Или я разрушаю архитектуру и делаю это по-другому?

Спасибо за любую помощь.

+2

Что вы пытаетесь сделать каждый раз? – Kingpin2k

+0

@ kingpin2k Я хочу выполнить плагин [Holder.run()] (http://imsky.github.io/holder/) для перерисовки изображений. – petkopalko

+0

Я не уверен в отношениях с EAK, но вам нужно запустить Holder. run() в цикле запуска ember. Итак, Holder.run() нужно вызвать в Ember.run() – elrick

ответ

1

Эй, @petkopalko из того, что вы сказали в комментариях, которые хотите использовать Holder.js для изображений с заполнителем, и, как вы сказали, вам нужно выполнить функцию Holder.run() из-за того, как работает функция holder.js. Что вы можете сделать, так это добавить Holder.run() в каждое представление, которое нуждается в нем в крюке didInsertElement, но это не то, что вы хотите сделать, и это может утомиться.

Теперь из кода выше, с Ember App Kit (ЕАК) и распознаватель я думаю, что вы на самом деле делаете, говоря:

export default Ember.View.extend({... 

изнутри app/views/application.js фактически экспортирует вид, связанный с ApplicationView, который поэтому выполнение будет выполняться только один раз, потому что Application View получает вставку при загрузке страницы.

Я немного взломал и, похоже, работает, что вам нужно снова открыть класс (объект) класса Embers и добавить держатель.run в крючок didInsertElement. Что, кажется, лучше всего работает от меня из EAK с повторным открытием базовых классов Ember, это сделать это в файле app.js.

Это будет выглядеть в app.js файле:

Ember.View.reopen({ 
    didInsertElement: function(){ 
    Ember.run.next(function(){ 
     Holder.run(); 
    } 
    } 
}); 

И это, кажется, работает только с ember.run

Ember.View.reopen({ 
    didInsertElement: function(){ 
    Ember.run(function(){ 
     Holder.run(); 
    } 
    } 
}); 

И если вы хотите, вы можете сохранить все, что вам код от прежде, чем просто разместить его в app.js

Ember.View.reopen({ 
    didInsertElement : function(){ 
    this._super(); 
    Ember.run.scheduleOnce('afterRender', this, this.afterRenderEvent); 
}, 
afterRenderEvent : function(){ 
    // implement this hook in your own subclasses and run your jQuery logic there 
    console.log("FIREEEEE"); 

    //You can place the holder.run() function here and not in views 

    Holder.run(); 
} 

});

Если вы не разместите Holder.run() в своей функции afterRenderEvent в режиме повторного открытия. Вам нужно будет поместить его в функцию afterRenderEvent, которую вы, похоже, хотите.

SomeView = Ember.View.extend({ 
    afterRenderEvent: function() { 
    this._super(); 
    Holder.run();  
    } 
}); 

Не уверен в побочных эффектах с этими подходами, но вы можете исследовать их после внедрения. Итак, у вас есть несколько вариантов: счастливое кодирование.

Прикрепленный вот jsbin, который, кажется, чтобы проиллюстрировать поведение, что я думаю, что вы ищете:

http://emberjs.jsbin.com/medamata/6/edit

+0

Спасибо за очень подробный ответ. – petkopalko

+0

Без проблем @petkopalko надеется, что это сработает хорошо для вас. – elrick

+0

EAK скоро забеременеть на новую Брокколи и Эмбер-кли, так что следите за ними. Они оба по-прежнему находятся в производстве, но стоит следить за ними и обходить их вместе с ними, в то время как EAK предполагает, что это будет почти один-к-одному шаг от EAK до Ember-cli & Broccoli. iamstef и joliss зарезервировали эти проекты. Просто FYI. – elrick

Смежные вопросы