5

Mam problem z dodaniem wtyczek społecznościowych Facebooka (w szczególności komentowania) do mojej aplikacji Rails 4 z włączoną funkcją Turbolinks. Poszedłem za przykładem na turbolinks issue #62, ale nie mogłem go uruchomić.Komentarze na Facebooku w/Rails 4 i Turbolinks

Próbowałem również rozwiązanie turbolink's here, ale nie mógł go uruchomić.

Naprawiono oczywistą literówkę na stronie turbolinków na this answer również nie działa.

Zestaw SDK nie ładuje się i nie ma żadnych błędów w konsoli.

Kod:

### 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> 

-

Dzięki. Naprawdę doceniam pomoc.

+0

Czy można rozwiązać ten problem? – marimaf

Odpowiedz

0

Spróbuj i daj mi znać, jeśli to działa ...

stworzyć social.js.coffee w assets/javascripts folder.

w nim napisać:

$(document).on 'page:change', -> 
    FB.init({ status: true, cookie: true, xfbml: true }); 
+0

Dzięki za odpowiedź. To sprawia, że ​​jest on pół-pracujący. Przy pierwszej wizycie na stronie komentarze nie są wyświetlane. Wysłanie zgłoszenia nie powoduje dołączenia nowego komentarza do listy komentarzy. Chociaż może to być niepowiązany problem. Po odświeżeniu strony wszystko wygląda tak, jak powinno. Czy to rozwiązanie nie inicjuje zestawu SDK przy każdym ładowaniu/zmianie strony - co powoduje wzrost kosztów w miarę wzrostu aplikacji? –

0

Wykonaj następujące czynności:

Install observejs:

gem 'observejs' 

Następnie dodać znacznik do widgetu:

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

następnie utworzyć nowy skrypt w javascrip Folder ts (fb.coffee w moim przykładzie):

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) 

dołączyć pliki js w twojej application.js

//= require observejs 
//= require fb