У меня есть приложение, которое отображает относительное время активности с помощью плагина moment js. Время обновляется автоматически, сравнивая его с текущим временем и отображает (например, новостную ленту facebook). Приложение было ранее написано на angularjs, где я создал эту функциональность со следующим кодом:
JS:
filter('convertSeconds', function() {
return function(seconds) {
if( typeof(seconds) == 'undefined' ) return;
// units is a string with possible values of y, M, w, d, h, m, s, ms
var duration = moment.utc().subtract(seconds, 'seconds'), format = "";
if( duration.day() > 0 ) { format += "DD [days] "; }
if(duration.hour() > 0){ format += "H [hours] "; }
if(duration.minute() > 0){ format += "m [minutes] "; }
format += " s [seconds]";
return duration.fromNow(true);
}
}).
HTML:
<div class="time-spent">
<i class="fa fa-clock-o mrs fa-2"></i>
{{me.current.activity.time_spent|convertSeconds}}
</div>
Фильтры angularjs вызываются автоматически каждую секунду, поэтому время обновляется, и мне не нужно об этом заботиться.
Теперь приложение переписывается, и js framework переходит с angularjs на durandaljs (по требованию клиента). Я не знаю, как мне добиться того же с durandaljs.
Activity
быть представлением? Вы говорите о множестве действий в одном из ваших комментариев. Являются ли действия просто объектными литералами с несколькими свойствами или чем-то более формальным? Вопрос немного вращается вокруг архитектуры. Создаем ли мы общий относительный таймер или конкретно относительный таймер активности? Кроме того, вы можете рассмотреть подход с глобальным таймером при разработке этого модуля. См. этот вопрос SO stackoverflow.com/q/2698866/3174746. - person   schedule 16.12.2014