Disqus评论计数不会出现在Turbolinks上

时间:2014-05-11 15:15:42

标签: ruby-on-rails ruby-on-rails-4 disqus turbolinks

我创建了一个简单的Rails 4 cms。在主页上以及类别和存档页面上有一个带有disqus注释计数的文章列表。

负责显示评论计数的disqus代码就在关闭正文标记之前。

当我启用Turbolinks时,注释计数仅在初始页面加载时显示。如果我访问文章然后返回文章列表,则没有评论计数。如果我重新加载页面,那么评论计数就在那里。

我尝试添加jquery.turbolinks gem。 我尝试编辑disqus代码,使其在页面上执行:change或page:load。 我试着把它放在脑袋里。 我试图在代码中添加disqus标识符。

更新 这是我现在正在尝试的(编辑我的短名称):

var disqus_shortname = 'my_shortname'; // required: replace example with your forum shortname

        /* * * DON'T EDIT BELOW THIS LINE * * */
        ($(document).on('page:change',function () {
            var s = document.createElement('script'); s.async = true;
            s.type = 'text/javascript';
            s.src = '//' + disqus_shortname + '.disqus.com/count.js';
            (document.getElementsByTagName('HEAD')[0] || document.getElementsByTagName('BODY')[0]).appendChild(s);
        })());

这样,评论计数会显示在初始页面加载时以及第一次访问帖子列表页面时。但是,当我第二次访问他们时,评论计数没有显示出来。尝试使用page:load和page:update也没有结果。

有人遇到过这个问题吗?

2 个答案:

答案 0 :(得分:1)

我无法使用默认的disqus注释计数代码,因此我使用了disqus api而不是魅力:

    $(document).on('page:change', function () {
        var disqusPublicKey = "MY_PUBLIC_KEY"; // Replace with your own public key
        var disqusShortname = "my_shortname"; // Replace with your own shortname

        var urlArray = [];

        $('.comment-link-marker').each(function () {
          var url = $(this).attr('data-disqus-url');
          urlArray.push('link:' + url);
        });

        $.ajax({
          type: 'GET',
          url: "https://disqus.com/api/3.0/threads/set.jsonp",
          data: { api_key: disqusPublicKey, forum : disqusShortname, thread : urlArray },
          cache: false,
          dataType: 'jsonp',
          success: function (result) {

            for (var i in result.response) {

              var countText = " comments";
              var count = result.response[i].posts;

              if (count == 1)
                countText = " comments";

              $('a[data-disqus-url="' + result.response[i].link + '"]').html(count + countText);

            }
          }
        });
      });

答案 1 :(得分:0)

这是Turbolinks的问题。使用Turbolinks页面将更改而不需要完全重新加载,因此您不能依赖DOMContentLoaded或jQuery.ready()来触发代码。

尝试此操作:添加jquery.turbolinks gem,更新application.js并重新启动服务器。