【问题标题】:Rails link_to in bootstrap modals引导模式中的 Rails link_to
【发布时间】:2014-12-31 05:27:47
【问题描述】:

我已经为一堆用户可以投票的项目进行了每个循环。这些项目列在索引页面上,每个项目作为一个按钮,在单击时打开一个引导模式。我希望用户能够对模式中的项目进行投票,但是我很难做到这一点。这是我所拥有的:

$(function () {
   $(".box-inner").click(function() {
   $('#modal_title').empty(); 
   id = $(this).data('id');
   url = window.location.origin + '/my_items/' + id + '/get_modal_content';

   $.ajax({
    cache: false,
    type: 'GET',
    url: url,
    data: id,
    complete: function() {
      $.getJSON(url, function (data) {
        $('#modal_title').append(data.name);
        $('#myModal').attr("data-id", id);
      });
     },
     success: function(data) 
     {
      $("#myModal").modal('show');
     }
    });
  });
});

这是模态的样子:

<div id="myModal" class="modal fade">
  <div class="modal-dialog">
    <div class="modal-content">
      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal" aria-hidden="true">x</button>
        <h3 id="modal_title"></h3>
      </div>
      <div class="modal-body">
        <div class="technique-info-section">
         <h3>Info</h3>
         <span class="thumbs-up">
          <%= link_to like_my_item_path(**???**), method: :put, :remote => true do %>
            <i class="fa fa-thumbs-o-up"></i>
          <% end %>
         </span>
         <span class="thumbs-down">
           <%= link_to dislike_my_item_path(**???**), method: :put, :remote => true do %>
             <i class="fa fa-thumbs-o-down"></i>
            <% end %> 
         </span>
        </div>
      </div>
    </div>
   </div>
 </div>

下面是 .each 循环的样子:

<% @techniques.each do |technique| %>
  <li class="technique-box-outer">
    <button class="box-inner" data-id="<%= technique.id %>">
      <p class="technique-name"><%= technique.name %></p>
    </button>
  </li>
<% end %>

所以在模式中的两个 link_to 路径中,我怎样才能让 link_to 辅助方法从 @techniques .each 循环中获得正确的项目,以便我可以将这些参数传递给我的控制器?

【问题讨论】:

    标签: javascript jquery ruby-on-rails ajax twitter-bootstrap


    【解决方案1】:

    当你拥有它时使用它,并保留它以供以后使用,如下所示:

    <%= button_tag data: {id: technique.id, like_path: like_my_item_path(technique), dislike_path: dislike_my_item_path(technique) } do %>
      <%= content_tag :p, technique.name, class: 'technique-name' %>
    <% end %>
    

    然后,在您的 js 中,您可以执行以下操作:

    like_path = $(this).data('like-path');
    dislike_path = $(this).data('dislike-path');
    
    $("#myModal .thumbs-up a").attr('href', like_path)
    $("#myModal .thumbs-down a").attr('href', dislike_path)
    

    作为旁注,您可能希望将点击绑定到更高级别的元素,以避免动态替换问题 (like turbolinks, for example)。像这样的:

    $(document).on 'click', '.box-inner', function() {}
    

    【讨论】:

    • 是的!完美,我只需要将 .attr 更改为 .prop 但除此之外,它就像一个魅力。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多