制作Rails javascript代码DRY

时间:2016-01-04 15:01:00

标签: javascript ruby-on-rails dry gon

我有两个文件使用一些常见的javascript代码和rails gon gem。

因此对于文件1:file1.js看起来像这样

$(function () {

   function a() {
    ....
   }

   $('id').on('click', function() {
     c = gon.obj1
     c.doSomething
     ....          
   })

   function otherMethods(){
   }
})

对于文件2:file2.js.erb我有,

var c = abc
function a() {
  ....
}

$('id').on('click', function() {
  c.doSomething
  ....          
})

//other code

现在我正在考虑通过提取file3.js中的公共代码来编写代码DRY:

function a() {
  ....
}

$('id').on('click', function() {
  c.doSomething
  ....          
})

由于我不熟悉javascript,因此我不确定如何填充c以使file1.jsfile2.js.erb正常工作。

  1. 如何将var c作为参数传递给公共文件,从file1和file2传递到公共代码(让我们称之为file3.js
  2. 我只是在<%= javascript_include_tag "file3.js" %>中执行类似file2的操作,在file1中类似地访问公共代码吗?
  3. 最终我希望file1.js看起来像:

    $(function () {
    
       function otherMethods(){
       }
    })
    

    file2.js.erb看起来像

    //other code
    

1 个答案:

答案 0 :(得分:2)

Rails使用sprockets从主application.js文件加载javascript文件。如果您查看该文件,您会注意到所有javascript文件是如何加载require_tree .的。您可以像file3.js一样复制此技术。

<强> file3.js

//=require file1
//=require file2

// your code here...

在您的第一个示例中,功能a()无法在全球范围内使用,而无需将其添加到window

<强> file1.js

window.a = a;