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.
感谢提供意见的人。
我的 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.
感谢提供意见的人。