Rails Best_in_place ajax:success 未被识别

Rails Best_in_place ajax:success not being recognized

我的 Rails 应用程序包含一个 Excel-like editable table,在整个过程中使用 best_in_place 字段。它们在页面加载时工作得很好,在用户编辑 best_in_place 字段后,我在 ajax:success 上调用 coffeescript 函数没有问题。

因为这是一个类似于 Excel 的 table,用户可以单击 link 将新的占位符行添加到 table。我的 create.js.erb 文件在没有重新加载页面的情况下添加了行。新行有几个具有 best_in_place 功能的 table 单元格,更新它们会更新数据库,目前一切顺利。

问题是,当用户随后编辑 new 行之一中的 best_in_place 字段时,ajax:success 不会触发,因此我的 coffeescript功能未启动。

我已经确认新的 table 单元格与现有的 table 单元格具有完全相同的 class 和数据属性(ajax:success 在 class姓名).

问题 - 在这种情况下,如果 ajax:success 未被识别,我该如何启动我的 coffeescript 函数?

里程碑控制器,创建和更新操作

def create
@payment_schedule = PaymentSchedule.find(params[:id])
build_default_milestone # this builds a placeholder milestone
if @milestone.save
  increment_milestone_positions # this relates to a sortable table
  respond_to do |format|
    format.js
    format.html { redirect_to :back }
  end
else
  respond_to do |format|
    format.js
    format.html { redirect_to :back }
  end
end
end

def update
@milestone = Milestone.find(params[:id])

respond_to do |format|
  if @milestone.update(milestone_params)
    update_milestone_amounts
    format.html { redirect_to(:back) }
    format.json { respond_with_bip(@milestone) }
  else
    format.html { redirect_to(:back) }
    format.json { respond_with_bip(:back) }
  end
end
end

Create.js.erb

$('#milestone-body').prepend('<%= escape_javascript(render partial: 'row_add', locals: { milestone: @milestone }) %>');

Coffeescript 函数

update-percent 是相关 best_in_place 字段的 class 名称。此函数对现有行完美触发,而不是新行。

$('.update-percent').on 'ajax:success', (event, data, status, xhr) ->
  ...

关于如何解决这个问题有什么建议吗?

您使用的是 Turbo 链接吗?我认为最好就地绑定到文档就绪,如果您使用的是 turbo 链接,这会很时髦。如果是这样,请将其从您的 application.html.erb 和 application.js 文件中删除,然后重试。

问题已解决。问题不是 ajax:success 没有触发,而是(出于未知原因)我不得不在 table body 级别而不是 table 有问题的单元格。显然这是一个有点常见的问题,在最初加载后向 DOM 添加新元素时,您需要阅读 ajax:success 更高的 DOM.

感谢提供意见的人。