我在destroy.js.erb中有一些代码来执行删除某个对象的ajax请求...
<%@ client.destroy%>无论如何都会运行bit,无论点击什么都会删除客户端。
callback: function(e) {
if (e === true) {
return $('#edit_client_<%= @client.id %>').parent().remove();
<% @client.destroy %>
console.log(e);
}else if (e === false){
console.log(e);
}
}
如何以优雅的方式解决这个问题?
答案 0 :(得分:2)
问题是您的文件以js.erb
结尾。这是资产管道的一部分,这意味着ERB
(Rails)位在任何JS之前运行(事实上,JS甚至不会在服务器,所以你不能真正颠倒命名的顺序,让它在服务器上运行。)
最简单的解决方案是添加一个数据属性,其中包含客户端的ID或类似于点击的按钮,并使用该ID而不是Ruby来生成ID。
回复:第一条评论
同样的事情适用。无论Javascript if
如何,ERB代码都将运行,因为ERB处理器并不理解/关心您的JS if
。最佳解决方案是向服务器发送AJAX请求,在控制器中执行destroy
。这也有利于干净地分离你的前端和后端。