动态变化&将变量传递给轨道中的部分

时间:2015-02-27 14:47:08

标签: javascript jquery ruby-on-rails ajax

好吧我拥有的是一个包含许多记录的数据表,每个记录都有自己的按钮来打开一个对话框。我希望每个对话框能够在每次通过AJAX请求时更改数据并打开到正确的数据...

问题是我需要动态更改sub变量,并且每次运行AJAX脚本时都会有所不同。

第一次完美运作......但下次加载时不会改变..不确定它是Div replaceWith()还是其他东西。

按钮:

<input class="payment_lookup" id="<%= account["account_code"] %>" type="button" value="View Payment Info">

使用Javascript:

$(".payment_lookup").on("click", function(event) {
        var id = event.target.id;
        $.ajax({
            url: "/billing/" + id + "/toggle_partial",
            type: "POST",
            success: function (data) {
                $("#payment_data").dialog("open");
            },
            error: function (jqXHR, textStatus, errorThrown) {
                alert('error: ' + textStatus + ': ' + errorThrown);
            }
        });
        return false;
    });

    $("#payment_data").dialog({
        autoOpen: false,
        width: $(window).width()-100,
        buttons: {
            "Close": function(){
                $(this).dialog("close");
            }
        }
    });

路线:

  post 'billing/:id/toggle_partial' => "billing#toggle_partial"

控制器:

  def toggle_partial
    code = params[:id]
    @sub = subscription_info(code)
    respond_to do |format|
      format.js
    end
  end

  def subscription_info(paysysid)
    unless paysysid.nil? || paysysid.empty?
      Recurly::Account.find(paysysid)
    end
  end

toggle_partial.js

$("#payment_data_details").replaceWith("<%= escape_javascript(render(:partial => 'payment_data', :sub => @sub )) %>");

也试过这个:

$("#payment_data_details").replaceWith("<%= escape_javascript(render(:partial => 'payment_data', :locals =>{ :sub => @sub } )) %>");

更新

我记录了所有内容:

一切都完美适用于toggle_partial.js

每次碰到部分JS文件时,

@sub都会发生变化。它将@sub传递给部分sub

BUT:

在视图中第一次设置sub时,第二次请求不会更改它...

第二次更新......

将它缩小到replaceWith(),如果我将其更改为append(),它会附加新的变量信息......但我宁愿让它替换以前的信息......实际上并没有追加....

解决

$("#payment_data_details").empty();添加到Onclick Javascript中,以便它清空该div的内容。在它试图设置新的之前。

    $(".payment_lookup").on("click", function(event) {
        var id = event.target.id;
        $("#payment_data_details").empty();
        $.ajax({
            url: "/billing/" + id + "/toggle_partial",
            type: "POST",
            success: function (data) {
                $("#payment_data").dialog("open");
            },
            error: function (jqXHR, textStatus, errorThrown) {
                alert('error: ' + textStatus + ': ' + errorThrown);
            }
        });
        return false;
    });

0 个答案:

没有答案