У меня есть приложение rails 3.1, в котором я хочу, чтобы пользователи могли обмениваться записями через Twitter, Google+ и Facebook (HTML5-версия кнопки «Мне нравится»).У меня это отлично работает на странице показа для элемента (то есть - просто показывает этот элемент), но у меня возникают проблемы на странице контейнера, которая загружает элементы в списке через Ajax.Я хочу, чтобы рядом с каждым элементом в контейнере были отдельные кнопки общего доступа.
При первой загрузке страницы кнопки общего доступа хорошо отображаются рядом с каждым элементом.Только когда я перезагружаю контейнер через ajax, возникает моя проблема.Кнопки Twitter, Google+ и Facebook не отображаются.Вот как я это настроил:
application.html.haml
-# This is right before the body tag closes
= render 'site/share_js'
_share_js.html.erb (код от каждого провайдера)
<div id="fb-root"></div>
<script>(function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
js = d.createElement(s); js.id = id;
js.src = "//connect.facebook.net/en_US/all.js#xfbml=1&appId=MY_APP_ID";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script>
<%# Twitter %>
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
<%# Google+ %>
<script type="text/javascript" src="https://apis.google.com/js/plusone.js"></script>
_share_buttons.html.erb (передается URL-адрес элемента для обмена)
<div class="share-buttons">
<%# Twitter %>
<a href="https://twitter.com/share"
class="twitter-share-button"
data-lang="en"
data-count="horizontal"
data-text="<%= share_text %>"
data-url="<%= bly_url %>">
Tweet
</a>
<%# Google+ %>
<g:plusone size="medium" href="<%= full_url %>"></g:plusone>
<%# Facebook %>
<div class="fb-like"
data-href="<%= full_url %>"
data-send="true"
data-layout="button_count"
data-width="75"
data-image="<%= image_path_here %>"
data-show-faces="false"></div>
</div>
Если я использую частичку share_buttons для элементапокажите страницу или при первой загрузке контейнера, он прекрасно работает:
_my_item.html.haml
-# other code here that displays the item...
= render :partial => 'site/share_buttons', :locals => share_info_hash
Но, как я упоминал выше, он нене работает и после действия ajax:
my_ajax_action.js.erb (вызывается через format.js в контроллере)
$("#item-container").html("<%= escape_javascript(render :partial => "my_item", :collection => @item_list)%>");
Отображаются все элементыправильно в контейнере, но кнопки общего доступа не отображаются.Я предполагаю, что проблема заключается в том, что специфичный для провайдера javascript должен запускаться после выполнения действия ajax.Я пытался поместить javascript провайдера в файл my_ajax_action.js.erb после обновления HTML, но, похоже, это не сработало.У кого-нибудь есть идеи, как мне заставить это работать?Любая помощь очень ценится!