2013-07-17 3 views
1

Чтобы объяснить мой конкретный прецедент: Итак, у меня есть новостная модель с полем «created_at». Отображение всех дат с помощью ArrayController работает отлично и, как ожидалось. Но то, что я хочу сделать сейчас, преобразует эти даты в нечеткое время с http://pragmaticly.github.io/smart-time-ago/ (или http://timeago.yarp.com/). Проблема здесь, мне нужно позвонить $('.timeago').timeago('refresh'); после того, как отметки времени будут загружены и отображены. Кажется, что все работает нормально, пока я перемещаюсь внутри ember-приложения. Но когда я обновляю сайт, плагин каким-то образом не может его преобразовать. Таким образом, я полагаю, что команда не вызывается в нужное время из приложения. я делаю, что в следующих двух направлениях прямо сейчас: в представлении:Обновление загруженных моделей с помощью JS

didInsertElement: function(){ 
    $('body').timeago('refresh'); 
} 

и в контроллере:

updateFuzzyTime: function(){ 
    $('body').timeago('refresh'); 
}.observes('content') 

Когда я делаю это в любом месте с помощью setTimeout() набор команд для 1000 мс, очевидно, работает.

Как я могу получить ember для выполнения этой команды, когда модель полностью загружена и отображается при обновлении? (В другом проекте у меня была аналогичная проблема, и там я использовал команду rerender(), которая действительно работала, но в этом прецеденте я просто не могу этого сделать)

Редактировать: просто отправьте его здесь. Плагин рассматривает атрибут datetime элемента времени. Так что мой HBS код выглядит следующим образом:

<time class="timeago" {{bindAttr datetime="date"}}>{{date}}</time> 

И я полагаю, что причина, почему большинство крючков не работают потому, что даже несмотря на то, DOM оказывается я полагаю, Эмбер не обновлял атрибут еще.

+0

Есть ли у кого-либо еще идеи? Или это недостающее будущее, вроде наличия события обратного вызова для bindAttr? – Markus

ответ

0

Попробуйте называть его обратным вызовом afterRender. Это обычно выполняется после всего остального.

init: function() { 
    this._super(); 
    Ember.run.scheduleOnce('afterRender', this, 'updateFuzzyTime'); 
} 

updateFuzzyTime: function() { 
    $('body').timeago('refresh'); 
} 
+0

Это, похоже, не работает, и я думаю, что проблема в том, что я использую следующий код: '' и плагин смотрит на атрибут datetime. Поэтому я предполагаю, что DOM завершен, но атрибут еще не установлен. Любые другие идеи? Хотя это действительно интересно, что вы опубликовали. Вы всегда узнаете что-то новое. И вы указали мне в хорошем направлении, посмотрим, что я могу найти. – Markus

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