Javascript 通过引导使用jquery popover的rails crud

Javascript 通过引导使用jquery popover的rails crud,javascript,jquery,html,ruby-on-rails,ruby,Javascript,Jquery,Html,Ruby On Rails,Ruby,我尝试将jquery popover添加到rails默认CRUD中,而不是重新引用到视图中,我所做的是在jquery popover中呈现表单: <%= content_tag_for :tr, @order.order_items do |i| %> <a class='btn btn-mini label-with-popover' id=<%=i.id%>><%= t('helpers.links.edit_html') %> </a&

我尝试将jquery popover添加到rails默认CRUD中,而不是重新引用到视图中,我所做的是在jquery popover中呈现表单:

<%= content_tag_for :tr, @order.order_items do |i| %>
<a class='btn btn-mini label-with-popover' id=<%=i.id%>><%= t('helpers.links.edit_html') %> </a>
<% end %>    

<script type="text/javascript">
    $(function () {
      $('.label-with-popover').popover({ 
        html : true,
        content: "<%= escape_javascript(render :partial => 'form_item') %>" , 
        placement:  'top'
      } );
    });
    </script>

$(函数(){
$('.label with popover')。popover({
是的,
内容:“'form_item')%>”,
位置:'顶部'
} );
});
这是我的表格项目:

<%= simple_form_for :order_item, url:  admin_shop_order_path,  :html => { :class => 'form-horizontal' } do |f| %>
  <div class='form-inputs'>
    <%= f.input :item_id , :collection => @shop.products.collect{|b| b.variants}.flatten.map{|variant| ["#{variant_full_title(variant)}", variant.id]}%> 
    <%= f.input :quantity %>
  </div>
  <div class="form-actions">
    <%= f.button :submit, :class => 'btn-primary' %>
    <%= link_to t("helpers.links.cancel"), admin_shop_orders_path, :class => 'btn' %>
  </div>
<% end %>
{:class=>'form horizontal'}do | f |%>
@shop.products.collect{b|b.variants}.flant.map{variant}[“{variant|u full_title(variant)}”,variant.id]}%>
“btn主节点“%”
'btn'>

但问题出现在“编辑”按钮上。为了呈现编辑表单,我们需要我们想要编辑的对象(:order_item,我的意思是),获得它的方法是使用id,这就是我设置锚定标记id的原因。现在我们必须在popover函数中获得锚定id,但是$(this)。id不起作用。有什么建议吗

在jQuery中,需要使用attr('id')来获取元素的id。尝试将$(this).id替换为:

有关更多详细信息,请参阅jQuery文档:

但实现这一点的首选方法通常是使用数据属性。这是一种将数据从视图传递到某些JS代码的干净方法。您的链接如下所示:

<a class='btn btn-mini label-with-popover' data-item-id=<%=i.id%>>...</a>
<script type="text/javascript">
    $(function () {
      $('.label-with-popover').popover({ 
        html : true,
        content: "<%= escape_javascript(render :partial => 'form_item', :locals => {order_item: @order_item}) %>" , 
        placement:  'top'
      } );
    });
    </script>

jQuery的文档:

您渲染错误,我认为,您应该尝试使用本地语言渲染部分内容。您还可以将局部变量传递到partials中,使它们更加强大和灵活

在本例中,在脚本标记中呈现部分
表单项时,可以这样编写:

<a class='btn btn-mini label-with-popover' data-item-id=<%=i.id%>>...</a>
<script type="text/javascript">
    $(function () {
      $('.label-with-popover').popover({ 
        html : true,
        content: "<%= escape_javascript(render :partial => 'form_item', :locals => {order_item: @order_item}) %>" , 
        placement:  'top'
      } );
    });
    </script>

$(函数(){
$('.label with popover')。popover({
是的,
内容:“'form_item',:locals=>{order_item:@order_item})%>”,
位置:'顶部'
} );
});
在您的表单中,您可以访问它,如:

<%= form_for(order_item) do %>

 # write your form stuff %>

<% end %>

#写下你的表格内容%>
通过这种方式,您可以处理表单的创建或编辑操作

首先,我建议您传递添加了一些文本的id(我将id替换为
“link”)
。 第二次调用a标记上的onclick函数:

<%= content_tag_for :tr, @order.order_items do |i| %>
<a class='btn btn-mini label-with-popover' id="link_<%=i.id%>" ><%= t('helpers.links.edit_html') onclick="javascript:openPopup(this.id)" %> </a>
<% end %>   

最后但并非最不重要的一点是,在函数中获取id,并将其传递给分部函数

<script type="text/javascript">
    function openPopup(a_id) {
      var id = a_id.split("link_")[1];
      $('.label-with-popover').popover({ 
        html : true,
        content: "<%= escape_javascript(render :partial => 'form_item', locals => {:id => id}) %>" , 
        placement:  'top'
      } );
    });
    </script>

函数openPopup(a_id){
变量id=一个分割的“链接”[1];
$('.label with popover')。popover({
是的,
内容:“'form_item',locals=>{:id=>id})%>”,
位置:'顶部'
} );
});

我不擅长javascript,但从我的回答中,你会得到,我想向你解释的东西。我相信你会找到一个更好的方法来做到这一点。如果你有,也请把它贴在这里。希望这会有帮助。谢谢

是的,我考虑过局部变量,但我在问题中没有提到,但我们仍然有问题。您想在哪里设置@order\u项目?有很多,我必须从主播那里得到身份证。我一定会帮你的。给我5分钟。必须再次查看jQuery popover library once.tnx bro,但局部变量中的“id”不会改变为它的值,因为我们是通过javascript获得它的。因为它是双引号。哦……我怎么会错过呢?content以string作为参数,可能有效:content:“'form_item',locals=>{:id=>“+id+”})%>”欢迎来到我正在处理的新问题:D我几个小时前遇到了这个问题:D问题是“”不起作用。我们在一个erb文件中,之后的所有内容都转换为ruby代码。也许你会说“试试”\Yeah tnx,但仍然有一个问题。我们不能在erb标记中这样使用该行:“”。这不起作用。我们在erb文件中。每个部分都不起作用?你能更新你的问题以包含来自erb的代码吗?在这种情况下,你确实需要将id传递给部分,如另一个答案中所述。