是否可以在js.erb文件中调用ruby helper方法?
我在application_helper.rb中有一个名为solve
的帮助程序,它对第三方服务进行API调用,并且只有一个ruby客户端。
js.erb文件没有在客户端运行,它是从控制器方法中调用并运行服务器端,因为它是PhantomJS。
我从控制器调用JS文件
Phantomjs.run('phantom.js.erb', url)
然后在PhantomJS js.erb文件中我尝试了
var response = '<%= solve(variable) %>'
只是将变量设置为字符串&lt;%= solve(variable)%&gt;
我也试过
var response = <%= solve(variable) %>
但这似乎使应用程序挂起并变得无法响应。
我见过类似的其他问题。在那些问题中,他们询问是否可以从客户端JS调用它,我知道你需要使用ajax请求。
这可能吗?
答案 0 :(得分:1)
试试这个:
var content = '#{solve()}'
答案 1 :(得分:0)
需要更多关于此问题的背景信息,但我会尽力回答:
有许多方法和架构可以解决这个问题,但这里有两个简单的方法和建筑:
<script> //JS ERB CODE GOES HERE </script>
将你想要内部评估的JS放在与partial / html.erb页面相同的页面上,它实际上会正确评估,因为它在erb文件中。然而,这通常被认为是不洁净的...... 您可能想要做的是将您想要的值(大概)传递给它所影响的html元素的“data”属性中的“solve”application_helper。通过以这种方式使用“不显眼的javascript”,您只需通过标记传递值,然后在您的JS中,您可以通过使用这样的jQuery代码获取变量。这是一个例子:
<%= link_to "test_link", root_path, :data => {:solve => solve } %>
当然它不一定是链接,任何HTML元素都可以,然后在你的jQuery中:
$("#test_link").data("solve");
无论application_helper中的“solve”方法输出什么输出,都会返回给你。
答案 2 :(得分:0)
它可以,但有不同的方法来做到这一点。一种方法是在控制器中的helper_method中定义方法,并从视图中调用它。另一种方法是使用gon gem访问javascript中的某些控制器值。请检查最适合您的信息,请查看以下链接以获取更多帮助
http://apidock.com/rails/ActionController/Helpers/ClassMethods/helper_method https://github.com/gazay/gon http://railscasts.com/episodes/324-passing-data-to-javascript