【问题标题】:Momentjs in meteor- reactivity?流星反应中的 Momentjs?
【发布时间】:2014-08-14 06:10:17
【问题描述】:

一直在流星中使用https://github.com/acreeger/meteor-moment 并且效果很好,但是有没有办法使时刻的输出反应,以便它计数“3 秒前”、“4 秒前”等?

【问题讨论】:

标签: meteor momentjs


【解决方案1】:

我不会为每个单独的计时器使用新的 Session 变量,而是创建一个 Tracker.Dependency 标记为每秒(或可能每 10 秒)更改一次,然后在您想要依赖当前时间。

var timeTick = new Tracker.Dependency();
Meteor.setInterval(function () {
  timeTick.changed();
}, 1000);

fromNowReactive = function (mmt) {
  timeTick.depend();
  return mmt.fromNow();
}

Template.example.helpers({
  example: function () {
    return fromNowReactive(moment().startOf('hour'));
  }
});

这是mizzao:timesync 采用的方法,如果那些fromNows 基于服务器端时间戳,您可以使用该方法。不使用客户端生成时间戳的一个原因是这些时间戳可能不同步,从而导致刚刚发布的帖子出现5 seconds from now 之类的字符串。 mizzao:timesync 允许在任何地方使用服务器生成的时间戳,并且还可以有效地将不同的反应间隔组合在一起。

【讨论】:

  • Deps 包名已更改为 Tracker。
【解决方案2】:

您现在可以使用包 copleykj:livestamp。 (github | atmosphere)

这样安装:

meteor add copleykj:livestamp

它依赖于 momentjs:moment,所以它会自动带来它。它安装了一个在任何地方都可用的通用助手,并且可以传递一个日期对象。

您可以在这样的模板中使用它:

<li>Regular:   {{date}}          </li>
<li>Livestamp: {{livestamp date}}</li>

Here's a working demo in MeteorPad

【讨论】:

  • 流星新手,所以 MeteorPad 示例很有帮助
  • Meteorpad 没有为我加载,但这是 - 目前 - imo 的最佳答案。
【解决方案3】:

感谢大家的回复,我找到了一个mrt包,它可以完成工作大气js.com/package/livestamp

【讨论】:

    【解决方案4】:

    使用setTimeout 和Session 来存储您的变量。

    类似这样的东西(在你的 lib 文件中):

    var updateTime = function () {
        var time = moment().startOf('hour').fromNow(); // 22 minutes ago
        Session.set('timeFromNow', time);
        setTimeout(updateTime, 60 * 1000); // 60 seconds
    });
    updateTime();
    

    然后,在您的模板中:

    Template.t.timeFromNow = function () {
        return Session.get('timeFromNow');
    }
    

    当触发 setTimeout 更新 Session 变量时,更新模板。

    【讨论】:

      猜你喜欢
      • 2013-04-07
      • 1970-01-01
      • 1970-01-01
      • 2017-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多