Комментарии в Facebook с Rails 4 и Turbolinks

У меня возникли проблемы с добавлением социальных плагинов Facebook (в частности, комментариев) в мое приложение Rails 4 с включенными Turbolinks. Я следовал примеру с проблема Turbolinks #62, но не смог заставить ее работать .

Я также попробовал решение turbolink здесь, но не смог заставить его работать.

Исправление очевидной опечатки на странице турбоссылок на этот ответ также не сработало.

SDK не загружается, и в консоли нет ошибок.

Код:

### view:
<div id="fb-root"></div>
<div class="fb-comments" data-href="<%= request.original_url %>"></div>

### coffeescript:
fb_root = null
fb_events_bound = false

$ ->
  loadFacebookSDK()
  bindFacebookEvents() unless fb_events_bound

bindFacebookEvents = ->
  $(document)
    .on('page:fetch', saveFacebookRoot)
    .on('page:change', restoreFacebookRoot)
    .on('page:load', ->
      FB.XFBML.parse()
    )
  fb_events_bound = true

saveFacebookRoot = ->
  fb_root = $('#fb-root').detach()

restoreFacebookRoot = ->
  if $('#fb-root').length > 0
    $('#fb-root').replaceWith fb_root
  else
    $('body').append fb_root

loadFacebookSDK = ->
  window.fbAsyncInit = initializeFacebookSDK
  $.getScript("//connect.facebook.net/en_US/all.js#xfbml=1")

initializeFacebookSDK = ->
  FB.init
    appId     : 'xxxxxxxxxxxx'
    channelUrl: '//www.mydomain.com/channel.html'
    status    : true
    cookie    : true
    xfbml     : true

### /public/channel.html
<script src="//connect.facebook.net/en_US/all.js"></script>

--

Спасибо. Очень ценю помощь.


person Chris C.    schedule 17.08.2013    source источник
comment
Вы решили проблему?   -  person marimaf    schedule 25.05.2014


Ответы (2)


Попробуйте это и дайте мне знать, если это сработает...

создайте папку social.js.coffee в папке assets/javascripts.

в нем напишите:

$(document).on 'page:change', ->
  FB.init({ status: true, cookie: true, xfbml: true });
person Gallonallen    schedule 11.10.2013
comment
Спасибо за ответ. Там он полурабочий. Однако при первом посещении страницы комментарии не отображаются. Нажатие «Отправить» также не добавляет новый комментарий в список комментариев. Хотя, возможно, это не связанная с этим проблема. После обновления страницы все выглядит так, как ожидалось. Кроме того, разве это решение не инициализирует SDK при каждой загрузке/изменении страницы, что становится дорогим по мере роста приложения? - person Chris C.; 29.10.2013

Сделайте следующее:

Установите наблюдения:

gem 'observejs'

Затем добавьте тег к виджету:

<div as="FB" class="fb-comments" data-href="<%= request.original_url %>"></div>

Затем создайте новый скрипт в папке javascripts (в моем примере это fb.coffee):

ObserveJS.bind 'FB', class
  root: document.createElement('div')
  @::root.id = 'fb-root'

  loaded: =>
    if !document.body.contains(@root)
      document.body.appendChild(@root)

    if FB?
      FB.XFBML.parse()
    else
      @initialize()

  initialize: =>
    js = document.createElement('script')

    script = document.getElementsByTagName('script')[0]
    js = document.createElement('script')
    js.id = 'facebook-jssdk'
    js.src = "//connect.facebook.net/en_US/all.js#xfbml=1&appId=YOUR_APP_ID&version=VERSION_OF_API"
    script.parentNode.insertBefore(js, script)

Включите файлы js в ваш application.js

//= require observejs
//= require fb
person Sergey Metelin    schedule 18.07.2016