Javascript Rails中具有可变行数的用户可编辑表
我正在运行Rails 3.2.11。在学习Rails和Javascript时,我正在做一个简单的wiki项目。我要做的是在我的数据库中存储一个两列表,用户可以编辑该表的内容和行数,并使用jQuery在单击按钮时为新表行添加表单。该表存储为一个散列,其中包含每行列的散列。i、 e.Javascript Rails中具有可变行数的用户可编辑表,javascript,jquery,ruby-on-rails,Javascript,Jquery,Ruby On Rails,我正在运行Rails 3.2.11。在学习Rails和Javascript时,我正在做一个简单的wiki项目。我要做的是在我的数据库中存储一个两列表,用户可以编辑该表的内容和行数,并使用jQuery在单击按钮时为新表行添加表单。该表存储为一个散列,其中包含每行列的散列。i、 e.{“row1”=>{“head”=>“first column/header content”,“tail”=>“second column/data content”},“row2”=>{“head”=>“first
{“row1”=>{“head”=>“first column/header content”,“tail”=>“second column/data content”},“row2”=>{“head”=>“first column/header content”,“tail”=>“second column/data content”}
用于编辑表格的my_form.html.erb部分如下所示:
<div id="node_table_row_0">
<%= f.fields_for :table do |table_rows| %>
<%= table_rows.fields_for :row do |table_cols| %>
<%= table_cols.text_field :head, :id => 'node_table_row_head_0' %>
<%= table_cols.text_field :tail, :id => 'node_table_row_tail_0' %>
<% end %>
<% end %>
<button id="add_table_row" type="button" class="btn btn-small">Add Row</button>
</div>
当我点击“添加行”按钮时,我得到确认onclick事件已经被识别,但是表单没有被追加。我是不是走错了路?似乎有一种更简单的方法可以做到这一点。您是否尝试过使用jQuery insertAfter()方法?使用jQuery选择表,然后使用.children().insertAfter(newRow) 编辑表格发生在与呈现表格的页面不同的页面上。好的,为了确保我理解这里发生的事情,编辑页面将向数据库发送查询,然后从数据库中提取表格,正确吗?编辑页面将包含一个表格,表格标题和内容的每一行都有一个单独的字段,是的,最终将填充表格的现有内容。不过,我还没走到那么远。现在,我只是尝试创建字段,以便它们可以根据输入更新数据库。棘手的部分是通过jQuery生成这些函数。您在确定要使用哪个选择器或调用哪个jQuery函数方面有困难吗?
<table class="table">
<% @node.table.each do |row| %>
<tr>
<th><%= row[1]['head'] %></th> <td><%= row[1]['tail'] %></td>
</tr>
<% end %>
</table>
$(document).ready(function(){
$('#header').append('Script loaded')
var newIndex = 0
$('#add_table_row').click(function(){
$('.sidebar_img').append('onclick event activated')
var prevIndex = newIndex
var prevRow = $('#node_table_row')
newIndex = newIndex + 1
var newRow = prevRow.clone(true).attr('id', 'node_table_row_'+newIndex)
newRow.find('#node_table_row_head').attr({ id: 'node_table_row_head_'+newIndex, name: 'node[table][row'+newIndex+'][head]'})
newRow.find('#node_table_row_tail').attr({ id: 'node_table_row_tail_'+newIndex, name: 'node[table][row'+newIndex+'][tail]'})
newRow.after(prevRow)
});
});