1

我有一个Transaction模型有两种形式用于创建和编辑Transaction。他们都是remote: true。表单实际上是相同的,只是有细微的差别,所以它们大多具有相同的标签,具有相同的类和 id。

按钮、字段、表单下拉列表的所有行为都在transaction.js.coffee文件中描述。

edit.js.coffee的是:

$('#new_transaction').remove()
$('#t_table').before('<%= j render 'edit_form' %>')
$('#edit_transaction_<%= @transaction.id %>').slideDown 'fast'

edit控制器的动作也很简单:

def edit
  @transaction = current_user.transactions.find(params[:id])
  respond_to do |format|
    format.html { redirect_to root_url }
    format.js
  end
end

因此,当用户单击“编辑”按钮时,代码会在同一位置edit.js.coffee删除new_transaction并呈现表单。edit_transaction

但是所有的行为transaction.js.coffee都不能在这种新形式中起作用。如果我将它复制到edit.js.coffee,它可以正常工作。但这对我不好,因为我需要在这两个地方更改代码,而且它也不适合 Rails 的所有 DRY 哲学(:

谢谢!

4

1 回答 1

0

您的问题是脚本在您修改 DOM 以包含表单标签之前运行。您可以使用.on()jQuery 函数(有时这很棘手)或在加载表单后调用edit.js.coffe您应该定义的函数(in )transaction.js.coffee

于 2013-07-20T18:33:35.333 回答