gpt4 book ai didi

javascript - Controller 内的动态字段参数

转载 作者:行者123 更新时间:2023-12-02 18:54:22 27 4
gpt4 key购买 nike

我有一个包含一些使用 jQuery 动态添加的日期字段的表单,为了处理提交的参数,我需要计算这些字段的数量,然后在 Controller 内我可以根据该数字进行循环:

application.js

$(function() {
var scntDiv = $('#foo');
var i = $('#foo div.bar').size();

$(document).on('click', '#addField', function() {
$('<div class="bar"><input type="text" id="start" name="start_'+ i +'"><input type="text" id="end" name="end_'+ i +'"></div>').appendTo(scntDiv);
i++;
return false;
});

假设我添加了n个输入,那么html输出将是:

<input type="text" id="start" name="start_1">
<input type="text" id="end" name="end_1">
.
.
.
<input type="text" id="start" name="start_n">
<input type="text" id="end" name="end_n">

我的问题是,如何访问我的 Controller 内的“n”?

我必须将所有日期范围存储在一个数组中,然后根据每个日期创建多个记录。

最佳答案

另一个选项,接近 nested_attributes 的实现方式(不是您将看到的最漂亮的 JavaScript,但您会明白其中的精髓):

$(function() {
var $scntDiv = $('#foo');

$('#addField').click( function(){
var index = $scntDiv.find( '.bar' ).size();
$(
'<div class="bar">' +
'<input type="text" class="start" name="ranges[' + index + '][start]">' +
'<input type="text" class="end" name="ranges[' + index + '][end]">' +
'</div>'
).appendTo( $scntDiv );
return false;
});
});

这将构建一个像这样的哈希:

>> params[:ranges]
=> {"0" => {"start" => "a_date_string", "end" => "another_date_string"},
"1" => {"start" => "a_date_string", "end" => "another_date_string"} }

即使使用批量分配,也可以轻松处理此哈希:

class MyClass
def ranges= ranges
ranges.each do |*,attributes|
# whatever logic pleases you, self.ranges.build( attributes ) for instance
end
end
end

但是,如果你这样做,你最好直接使用 nested_attributes ,除非您要执行非常复杂的逻辑。嵌套属性有很多好处,例如子记录的自动实例化、记录删除管理、根据需要自动拒绝某些属性,它们与 fields_for 表单助手配合良好,等等。它是 Rails 原生的,那么为什么要费心重新发明轮子呢?

关于javascript - Controller 内的动态字段参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15529146/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com