我有一个包含多行的目录。
对于任何给定的行,我希望能够验证记录,并通过将“验证链接”超链接更改为纯文本“已验证”,将其立即反射(reflect)在屏幕上。
对于其他人来说似乎是相当常见的模式。
我有以下标记:
...# (table stuff).
= link_to 'verify', verify_link_path(:id => link.id), class: 'verify', remote: true
这(成功)调用链接 Controller “verify_link”方法:
def verify_link
@link = Link.find(params[:id])
# Ignore additional verify logic for now, just set as verified (when the user clicks verify).
@link.verified_date = Time.now
@link.save!
respond_to do |format|
format.js
end
end
我知道这有效...因为数据库会更新。
最后我想更新页面(表格行单元格)以反射(reflect)这一点。 这就是我被困住的地方。
Controller 方法成功调用以下app/views/links/verify_links.js.erb
文件:
$(function() {
$(".verify")
.bind("ajax:success",function(event,data,status,xhr) {
this.text='verified';
alert("The link was verified.");
});
});
我知道它会被调用...因为我可以将 alert("hello world");
放在开头,它会显示为弹出窗口。
不起作用的部分是将“验证”链接替换为纯文本“已验证”。
实际上我什至根本无法在那里工作alert
。
用户界面中没有任何内容更新。然而,在后端,数据库中发生了更改,因此,如果我刷新页面,我确实会看到此时反射(reflect)的更改)。
注释:
- 存在多个链接是否存在问题?即,我是否应该使用一个 id,我必须从表行 id 或数字中获取该 id
- 应用程序版本是带有 Assets 管道的rails 3.2.17。
- 应用最初是用 Rails 2 编写的,后来进行了升级。
- 我正在使用 jquery 1.7.2 和rails.js,但最初避免使用 Angular、ember 等框架,因为我想先了解更多较低级别的内容。一旦我这样做了,我就会使用一个框架。
最佳答案
@hjing 是对的。 app/views/links/verify_links.js.erb 中的代码已经是对 ajax 的响应。您不需要将其绑定(bind)到 ajax:success。
正如您所建议的,您需要为每个链接创建一个 id,您必须从表行 id 或编号中获取该 id。例如,对于您来说,您的链接将如下所示:
= link_to 'verify', verify_link_path(:id => link.id), class: 'verify', id: "verify_#{table_row_no}", remote: true
然后在您的app/views/links/verify_links.js.erb中,您可以像这样定位该特定链接:
$("#<%= j 'verify_#{table_row_no}' %>").text("verified");
$("#<%= j 'verify_#{table_row_no}' %>").prop("href","#"); #you would also want to change the href in case someone clicks it again
关于ruby-on-rails - 如何让rails在数据库更新后使用ajax更新HTML表行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23970739/