【问题标题】:Render partial and passing a collection with jQuery使用 jQuery 渲染部分并传递集合
【发布时间】:2015-04-17 02:35:31
【问题描述】:

我正在尝试使用 jQuery 呈现部分内容。动作流是单击一个按钮,jquery 对我的控制器进行 AJAX 调用,然后在响应时呈现部分传递数组。无论我多么努力,我都无法做到这一点。我设置的 html(即 ruby​​)呈现为纯文本而不是 ruby​​。是的,我确实有一个 _cart.html.haml 文件。

function updateCart( id ) {
    $.ajax({
        url: '/items/add_item',
        data: {'id': id },
        method: 'POST'})
    .done ( function ( data ) {
        var cart = data;
        var cart_items = data["cart_items"];
        var cart_total = data["cart_total"];
        $('#cart-wrapper')
        .html("#{ escape_javascript(render(partial: 'items/cart', collection: " + cart_items + ", as: 'cart_items')) }");
    });
}

提前感谢您的帮助!

编辑: 添加了 add_item 方法

def add_item
  cart = session[:cart] || Cart.new
  cart.add_item(params[:id])
  respond_to do |format|
    format.json do
      Create an array from the search results.
      results = {
        cart_items: cart.cart_items,
        cart_total: cart.total
      }
      render json: results
    end
  end
  session[:cart] = cart
end

【问题讨论】:

    标签: jquery ruby-on-rails ajax haml


    【解决方案1】:

    使用 dataType: 脚本选项如下

    function updateCart( id ) {
        $.ajax({
            url: '/items/add_item',
            data: {'id': id },
            method: 'POST',
            dataType: 'script'})
        });
    

    向控制器发送请求,从您的控制器执行以下操作

     def add_item
       your logic goes here ....
       @cart_items = ...
       @cart_total = ...
       respond_to do |format|
         format.js {}
       end
     end
    

    然后在相应的视图文件夹中创建 add_item.js.erb(我猜它在您的项目视图文件夹中),然后将以下代码放入该文件中

    item.js.erb

    $('#cart-wrapper').html("<%= j(render(:partial => 'cart', :locals => {:cart_items => @cart_items, :cart_total => @cart_total}))
    

    最后在您的 _cart.html.erb 部分执行所需的每个循环和您的代码,如下所示

    <%- cart_items.each do |c| %>
      <%= c.name %>
    <% end %>
    Total : <%= cart_total %>
    

    【讨论】:

    • 我更新了我的帖子。我没有使用 js.erb 文件,因此我无法按照您所说的方式进行操作。如果我添加 dataType: 'script',它将永远不会调用 .done 回调。我想将数据作为 json 文件使用。
    • 如果你想使用 json 数据,为什么你需要渲染部分(购物车),如果你想使用 json 数据,你可以使用 dataType 作为 jsonp 和 rails4 提供使用 json构建器视图,或者您也可以将 rabl 用于 json 视图
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-24
    • 2015-07-05
    • 2015-10-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多