1

解释我的确切用例:所以我有一个带有“created_at”字段的新闻模型。使用 ArrayController 显示所有日期可以正常工作并且符合预期。但我现在想做的是使用http://pragmaticly.github.io/smart-time-ago/(或http://timeago.yarp.com/)将这些日期转换为模糊时间。$('.timeago').timeago('refresh');这里的问题是,一旦加载并显示了时间戳,我就需要调用它。只要我在 ember-app 中导航,这似乎就可以正常工作。但是当我刷新一个站点时,插件不知何故无法转换它。所以我想该命令不会在正确的时间从应用程序中调用。我现在通过以下两种方式做到这一点:在视图中:

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

在控制器中:

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

当我在任何一个地方将setTimeout()命令设置为 1000ms 时,它显然确实有效。

那么,当模型完全加载并在刷新时显示时,如何让 ember 执行该命令?(在另一个项目中我遇到了类似的问题,在那里我使用了rerender()确实有效的命令,但在这个用例中我根本无法做到这一点)

编辑:也只是在这里发布。该插件查看时间元素的日期时间属性。所以我的 hbs 代码如下所示:

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

而且我想大多数钩子不起作用的原因是因为即使渲染了 DOM 我想 Ember 还没有更新属性。

4

1 回答 1

0

尝试在afterRender回调中调用它。这通常在其他所有事情之后执行。

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

updateFuzzyTime: function() {
  $('body').timeago('refresh');
}
于 2013-07-17T15:53:47.667 回答