Rails:在`.js.erb`文件中运行`application.js`中的函数

时间:2014-07-08 17:45:18

标签: javascript jquery ruby-on-rails erb

如何在application.js文件中运行来自.js.erb的函数?我宁愿不必复制所述函数。

应用程序/资产/ Javascript角/ application.js中

$(document).on('pagecontainershow', function() {
  var someFunction = function() {
    function someOtherFunction() {
      console.log('Hello world')
    }
  }();
});

应用程序/视图/物品/ create.js.erb

<% unless @article.errors.any? %>
  someFunction.someOtherFunction();
<% end %>

3 个答案:

答案 0 :(得分:0)

rails创建的默认application.js中有一条评论

// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
// compiled file.

我可以处理此问题的方法是将您的代码移至另一个js文件functions.js,然后记下您在application.js中引用它们的顺序。在使用这些功能的任何其他文件之前,应首先要求functions.js。在你的情况下,你可以有像

这样的东西

的application.js

//= require jquery
//= require jquery_ujs
//= require functions
//= require_tree .

您现在应该可以在create.js.erb

中调用该功能

答案 1 :(得分:0)

正如我在评论中提到的那样,您需要将功能分开,或者需要调用包含这些功能的on change事件。试试这个:

function someotherfunction(){
  console.log("Hello");
}    

function somefunction(){
  someotherfunction();
  // your logic 
}

$(document).on('pagecontainershow', function(){
  somefunction();
});

<% unless @article.errors.any? %>
  someFunction();
<% end %>

答案 2 :(得分:0)

我最终使该函数成为一个全局jQuery函数,现在效果很好:

global jquery function