如何让 Meteor 反应性地更新 "time since" 字符串?
How to make Meteor reactively update a "time since" string?
我想在我的模板中实现一个助手,它会显示自特定时间戳以来的时间。
Template.postItem.helpers({
timeSinceString: function(timestamp) {
return moment(timestamp).fromNow();
}
});
这在加载时工作正常,但除非重新加载模板,否则它不会更新。这是可以理解的,因为没有跟踪 fromNow()
函数。我如何确保用户看到的内容是最新的?
一些例子:
- “5 小时前”
- "a few seconds ago"
- “1 天前”
在渲染上加载更新会话变量的函数:
Template.postItem.rendered(function() {
setInterval(function() {
Session.set('currentTime', moment());
}, 1000); // Replace 1000 with your level of time detail
});
Template.postItem.helpers({
timeSinceString: function(timestamp) {
return Session.get('currentTime').from(moment(timestamp));
}
});
我找到了这个包,它非常简单:https://atmospherejs.com/copleykj/livestamp
我使用 mizzao:timesync
package (which I wrote) in combination with moment.js 来处理这个问题,它会生成那些特定的字符串。
mizzao:timesync
非常有用,因为它允许您通过计算 NTP 样式的偏移量在客户端上使用 服务器时间 ,因此即使客户端时间不对。它还有效地将反应式计时器组合在一起,以更新屏幕上的所有时间戳。
的一部分
remcoder:chronos 包提供了一种非常有用的方法来做到这一点。它定义了一个自动更新的反应时间变量。
注意:默认更新间隔为一秒。我发现在实践中,当显示许多时间变量时,这可能会占用严重的 cpu 周期。对于快速变化的事物(如文件上传进度表),我使用一秒钟。对于移动较慢的东西,我使用 20 分钟。
我想在我的模板中实现一个助手,它会显示自特定时间戳以来的时间。
Template.postItem.helpers({
timeSinceString: function(timestamp) {
return moment(timestamp).fromNow();
}
});
这在加载时工作正常,但除非重新加载模板,否则它不会更新。这是可以理解的,因为没有跟踪 fromNow()
函数。我如何确保用户看到的内容是最新的?
一些例子:
- “5 小时前”
- "a few seconds ago"
- “1 天前”
在渲染上加载更新会话变量的函数:
Template.postItem.rendered(function() {
setInterval(function() {
Session.set('currentTime', moment());
}, 1000); // Replace 1000 with your level of time detail
});
Template.postItem.helpers({
timeSinceString: function(timestamp) {
return Session.get('currentTime').from(moment(timestamp));
}
});
我找到了这个包,它非常简单:https://atmospherejs.com/copleykj/livestamp
我使用 mizzao:timesync
package (which I wrote) in combination with moment.js 来处理这个问题,它会生成那些特定的字符串。
mizzao:timesync
非常有用,因为它允许您通过计算 NTP 样式的偏移量在客户端上使用 服务器时间 ,因此即使客户端时间不对。它还有效地将反应式计时器组合在一起,以更新屏幕上的所有时间戳。
remcoder:chronos 包提供了一种非常有用的方法来做到这一点。它定义了一个自动更新的反应时间变量。
注意:默认更新间隔为一秒。我发现在实践中,当显示许多时间变量时,这可能会占用严重的 cpu 周期。对于快速变化的事物(如文件上传进度表),我使用一秒钟。对于移动较慢的东西,我使用 20 分钟。