2016-01-04 2 views
0

У меня есть два файла, которые используют некоторый общий код javascript и рельсы gon gem.Создание Rails javascript code DRY

Так что для файла 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 

Теперь я рассматриваю сделать мой код DRY путем извлечения общего кода в file3.js :

function a() { 
    .... 
} 

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

Поскольку я новичок в javascript, я не знаю, как я мог бы заполнить c так, чтобы как file1.js, так и file2.js.erb работать правильно.

  1. Как передать уаг с в качестве аргумента в общий файл из file1 и file2, к общему коду (назовем его file3.js)
  2. ли я просто сделать что-то вроде <%= javascript_include_tag "file3.js" %> в file2, а так же в file1 для доступа к общему коду?

В конце концов, я хочу, чтобы иметь file1.js выглядеть следующим образом:

$(function() { 

    function otherMethods(){ 
    } 
}) 

и file2.js.erb выглядеть

//other code 

ответ

2

Rails использует звездочки для загрузки файлов JavaScript из первичного application.js файла. Если вы посмотрите на этот файл, вы заметите, как все файлы javascript загружаются с require_tree .. Вы можете скопировать эту технику в свой file3.js так.

file3.js

//=require file1 
//=require file2 

// your code here... 

В первом примере функция a() не будет доступен по всему миру без добавления его в window.

file1.js

window.a = a; 
+0

но как посылать различные значения с в file3 из file1 и file2? также проверьте мой обновленный вопрос, чтобы я мог быть более понятным – gazubi