在我的应用程序中,我有一个按钮,点击后会打开一个弹出窗口,在我的application_controller中,按钮定义如下,
{:text => 'Info', :path => Proc.new{ |x| info},
:html => { :id => 'info' }}
和在application_helper中我有一个将该哈希值转换为按钮的函数。我在proc in application_controller中定义了你看到的信息,如下所示:
def self.info
if some_conditions
"javascript: popUpInfoCenter('an_url'); return false;"
else
"javascript: popUpInfoCenter('other_url');return false;"
end
结束
我遇到的问题是在点击按钮后,会打开一个新的弹出窗口,这是所希望的行为。但是,包含该按钮的页面将呈现为带有“false”字样的空白页面。我希望页面在单击按钮后保持原样。我尝试使用:
view_context.link_to_function "javascript: popUpInfoCenter('an_url'); return false;"
但是view_context和link_to_function都在轨道3.2.14中死亡。所以,如果您认为有更好的方法,请告诉我。
P.S:这是我能够修改的所有文件。
答案 0 :(得分:0)
总的来说,将硬编码JS转换为Rails控制器与convention相反,如果您希望代码高效运行,则需要确保只部署每个文件以执行所需的操作
<强>的Ajax 强>
从它的外观来看,我认为你需要看一下Ajax
Ajax基本上允许您向URL发送请求(控制器操作),并处理返回的值。语法如下:
#javascript
$.ajax({
url: "your/url",
success: function(data) {
//stuff here
}
error: function(data) {
//stuff here
}
});
<强>代码强>
您想要基于变量加载表单
因此,我会通过Ajax请求的“data”配置将变量发送给操作。这将允许我们回应我们处理该请求所需的任何内容,我们可以使用Rails中的respond_to
功能
#app/assets/javascripts/application.js
$("button").on("click", function(e) {
e.preventDefault();
$.ajax({
url: "/your/controller/action",
data: "your_url",
});
});
#app/controllers/application_controller.rb
def your_action
respond_to do |format|
format.js
end
end
#app/views/controller/action.js.erb
popUpInfoCenter(<%=j params[:data] %>);