我有一个AJAX电话:
$('#enrollment_members').change(function(){
var memberNumber = $(this);
$.ajax({type: 'GET',
url: $(this).href,
type: "get",
data: { members: memberNumber.val() },
error: function(){ alert("There was a problem, please try again.") }
});
return false;
console.log(data);
});
我通过它将params [:members]发送到一个新方法。
我想做这样的事情:
def new
@enrollment = Enrollment.new
params[:members] ? params[:members].to_i.times { @enrollment.atendees.build } : @enrollment.atendees.build
respond_to do |format|
format.js
end
end
我需要此值才能知道要构建多少fields_for
。
但是在新操作中,如何在members
输入字段中输入值后更新新视图的内容?
从那个三元组中,@ enrollment.atendees包含4个对象。
我的new.js.erb
:
$("#contact-wrap").html("<%= j render(:partial => 'enrollments/form') %>");
xhr响应包含4个fields_for
表单。
答案 0 :(得分:0)
对象#enrollment_members
是否是您尝试传递给控制器的输入值?
如果是这样,试试这个:
$('#enrollment_members').change(function(){
var memberNumber = $(this);
$.ajax({type: 'GET',
url: $(this).href,
type: "get",
data: { members: memberNumber.serialize() }, //CHANGE
error: function(){
alert("There was a problem, please try again.")
}
});
return false;
答案 1 :(得分:0)
嗯,你真的确定你需要一个定制的解决方案吗?在fields_for
中动态添加/删除子项的行为已经受到nested_form(不再维护)或cocoon(更有希望)等几个宝石的支持
即使您需要按照自己的方式进行调整,我也建议您重新使用它们的库。因为做一个AJAX请求是完全没有意义的。你的AJAX是一个GET请求,总是做同样的事情,除非你有一个自定义的atendees.build
,它会为连续的调用做一些奇怪的事情(比如在某个地方增加一个全局计数器)。
我上面提到的那些宝石实际上会保存HTML字段以在&#34;模板中生成&#34; (在本地存储在HTML或JS中),只要在想要添加新字段时调用此模板。
答案 2 :(得分:0)
我通过修改ajax调用来实现它:
$('#enrollment_members').change(function(){
var memberNumber = $(this);
$.ajax({type: 'GET',
url: $(this).href,
type: "get",
dataType : "html",
data: { members: memberNumber.val() },
success: function( data ) {
var result = $('<div />').append(data).find('#contact-wrap').html();
$('#contact-wrap').html(result);
$('#atendees-wrap').show();
},
error: function( xhr, status ) {
alert( "Sorry, there was a problem!" );
}
});
return false;
});