Rails 4:获取Twitter分享按钮与Turbolinks合作

时间:2014-12-28 03:42:53

标签: ruby-on-rails twitter coffeescript turbolinks

我正在尝试使用Twitter共享按钮来使用Rails 4应用程序+ Turbolinks。

在我看来,我有:

<a href="https://twitter.com/share" class="twitter-share-button" data-lang="en" data-text="<%= @article.title %>" data-via="<%= t('twitter_user') %>">Tweet</a>

我的app / assets / javascripts /目录中还有一个 twitter.js.coffee 文件:

class @Twitter
    eventsBound = false
    @load: ->
        Twitter.loadTwitterSDK()
        Twitter.bindEvents() unless Twitter.eventsBound
    @bindEvents: ->
        if typeof Turbolinks isnt 'undefined' and Turbolinks.supported
            $(document).on('page:load', Twitter.renderTweetButtons)
        Twitter.eventsBound = true
    @renderTweetButtons: ->
        $('.twitter-share-button').each ->
            button = $(this)
            button.attr('data-url', document.location.href) unless button.data('url')?
            button.attr('data-text', document.title) unless button.data('text')?
    @loadTwitterSDK: ->
        $.getScript("//platform.twitter.com/widgets.js")
Twitter.load()

当我硬刷新页面时出现按钮但导航时消失(可能是由于Turbolinks)。我可能需要继续调用renderTweetButtons函数,但我不确定如何。

任何帮助表示赞赏!谢谢:))

3 个答案:

答案 0 :(得分:1)

问题是我在@renderTweetButtons中遗失了twttr.widgets.load(),记录为here。这就是现在的完整文件:

class @Twitter
    eventsBound = false
    @load: ->
        Twitter.loadTwitterSDK()
        Twitter.bindEvents() unless Twitter.eventsBound
    @bindEvents: ->
        if typeof Turbolinks isnt 'undefined' and Turbolinks.supported
            $(document).on('page:load', Twitter.renderTweetButtons)
        Twitter.eventsBound = true
    @renderTweetButtons: ->
        $('.twitter-share-button').each ->
            button = $(this)
            button.attr('data-url', document.location.href) unless button.data('url')?
            button.attr('data-text', document.title) unless button.data('text')?
        twttr.widgets.load()
    @loadTwitterSDK: ->
        $.getScript("//platform.twitter.com/widgets.js")
Twitter.load()

解决了这个问题。

答案 1 :(得分:0)

而不是:

Twitter.load()

尝试:

$(document).ready(Twitter.load())
$(document).on('page:load', Twitter.load())

答案 2 :(得分:0)

这对我有用:

将提供的javascript代码段替换为指向platform.twitter.com/widgets.js的外部脚本代码。

<body>
  <a href="https://twitter.com/share" class="twitter-share-button" data-url="http://example.org" data-size="large">Tweet</a>
  <script src="//platform.twitter.com/widgets.js"></script>
</body>

来源here