Gem 关于 jquery-timeago-rails 这个 gem

jyootai · 2014年04月10日 · 最后由 jyootai 回复于 2014年04月11日 · 3037 次阅读

我想干嘛 : 要实现显示时间的问题 我怎么做及遇到的问题: 1,想要使用jquery-timeago-rails这个 gem。 https://github.com/sugarcrm/jquery-timeago-rails 可是这个 gem 好像已经不存在 2,于是有找了这个 https://github.com/rmm5t/jquery-timeago 但是不知道怎样加载到 rails 中使用。 3,参照 ruby-china 的例子,在javascripts中加入了jquery.timeago.js同时使用了timeago函数,运行未报错,但是也没有显示出时间。

重点:寻求大家的建议

没引用 js 文件吧

@huacnleeapplication.js

.....
//=require jquery.timeago
//=require jquery.timeago.settings
.....

并且这两个文件都在本目录下。 我是在开发环境

浏览器上面报什么错?

@huacnlee 运行未报错,下面这是显示出来 html 的截图

标签中没有値

#4 楼 @jyootai 调用 timeago 那段 js 贴上

如下:

.list-group-item-heading
  a href=topic_path(topic)
     b = topic.title
 .text-muted
   = topic.user.username
    = timeago(topic.created_at)

#6 楼 @jyootai

.list-group-item-heading
  a href=topic_path(topic)
     b = topic.title
 .text-muted
   = topic.user.username
    = timeago(topic.created_at.iso8601)

你试一下吧最后一行改掉,它需要特殊格式才能转换

@tiseheaini 如果在最后以后加iso8601,会报没有这个方法的错误 并且这个格式已经在timeago这个方法里做了https://github.com/ruby-china/ruby-china/blob/master/app/helpers/application_helper.rb

def timeago(time, options = {})
    options[:class]
    options[:class] = options[:class].blank? ? "timeago" :     [options[:class],"timeago"].join(" ")
    content_tag(:abbr, "", options.merge(:title => time.iso8601)) if time
  end

#8 楼 @jyootai 你有使用 js 调用? 类似 $("abbr.timeago").timeago();

@tiseheaini 我就模糊在这,如上所说,我在application.js中加了require jquery.timeagorequire jquery.timeago.settings这两个行。你所说的调用我不是很清楚

#10 楼 @jyootai

$(document).ready(function(){
    $("abbr.timeago").timeago();
});

我不会写 coffee,你在 application.js 里加上这几行代码就可以了。

@tiseheaini 这样就 ok 了,不过真的为什么?😏

@tiseheaini @huacnlee 添了那段 js 后时间现在显示出来了,但有一个问题,翻页后时间又不在了,只有重载页面才会又出现,知不知道这是什么原因?

#13 楼 @jyootai 我猜你用的是 rails 4.x.x ,你可能还不会用 turbolinks

#14 楼 @tiseheaini 问题解决了,你试着搜索 turbolinks ,尝试看看文档

@tiseheaini Rails 4.0.2 ,这问题怎么能更快的解决呢?

@tiseheaini 问题解决

$(document).ready(function(){
    $("abbr.timeago").timeago();
});$(window).bind('page:change', function() {
       $("abbr.timeago").timeago();
});

使 document.ready 和 page:change 事件都可以被触发。

不知道还有没有更简单的写法

我觉得没办法吧,timeago 本来就是在 js 写的,页面结构改变后,怎么也要重新渲染一遍吧。 非要更简单的方法,就是请人写了。

@shatle 可以将$(document).ready换成page:change,可以使用 coffeescipt, http://ruby-china.org/topics/17977 但有个问题不清楚,当我把application.js名字改成application.js.coffee后就要报错ExecJS::ProgramError 报错的是= javascript_include_tag "application", "data-turbolinks-track" => true这一句。 不知道什么地方还要改改?

需要 登录 后方可回复, 如果你还没有账号请 注册新账号