5

Tôi đang gặp sự cố khi thêm các plugin xã hội Facebook (đặc biệt là nhận xét) vào ứng dụng Rails 4 của tôi với Turbolinks được bật. Tôi đã làm theo ví dụ trên turbolinks issue #62, nhưng không thể làm cho nó hoạt động.Nhận xét trên Facebook w/Rails 4 và Turbolinks

Tôi cũng đã thử giải pháp turbolink here, nhưng không thể làm cho nó hoạt động.

Sửa lỗi đánh máy rõ ràng trên trang turbolinks trên mỗi this answer cũng không hoạt động.

SDK không tải và không có lỗi trong bảng điều khiển.

Code:

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

-

Cảm ơn. Thực sự đánh giá cao sự giúp đỡ.

+0

bạn đã giải quyết vấn đề? – marimaf

Trả lời

0

Hãy thử điều này và cho tôi biết nếu nó hoạt động ...

tạo social.js.coffee trong assets/javascripts thư mục.

trong đó viết:

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

Cảm ơn câu trả lời. Điều đó có nó bán làm việc. Tuy nhiên, trong lần truy cập đầu tiên vào một trang, các nhận xét sẽ không được hiển thị. Việc gửi bài đăng cũng không thêm nhận xét mới vào danh sách nhận xét. Mặc dù, đây có thể là một vấn đề không liên quan. Sau khi làm mới trang, mọi thứ sẽ xuất hiện như mong đợi. Ngoài ra, không phải là giải pháp khởi tạo SDK trên mỗi tải trang/thay đổi - tốn kém khi ứng dụng phát triển? –

0

Làm như sau:

Install observejs:

gem 'observejs' 

Sau đó thêm thẻ để widget:

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

Sau đó tạo một tập lệnh mới trong javascrip ts thư mục (fb.coffee trong ví dụ của tôi):

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) 

Bao gồm các file js trong application.js bạn

//= require observejs 
//= require fb 
Các vấn đề liên quan