好吧我拥有的是一个包含许多记录的数据表,每个记录都有自己的按钮来打开一个对话框。我希望每个对话框能够在每次通过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;
});