2016-01-04 26 views
2

我使用Rails 4設置一個全局變量之前// =需要.js文件(軌道)

我有以下的.js文件(只是一個例子):

//= require foo.js 

現在我想通過設置一個全局變量來影響foo.js的行爲。所以,我有以下幾點:

var fooType = 'abc'; 
//= require foo.js 

而且foo.js有以下幾點:

$(function() { 
    if(window.Handlebars && $('#some-id').length) { 
     if (typeof fooType == 'undefined') { 
      fooType = 'xyz'; 
     } 
     Somelib.init(fooType); 
    } 
}); 

但是,這是行不通的。事實上,foo.js似乎並沒有被加載。

以下工作:

//= require foo.js 
var fooType = 'abc'; 

可有人請解釋一下嗎?

此外,在這種情況下,使用全局變量是一種好的做法嗎?如果沒有,我該怎麼做到這一點?

+0

使用全局變量根本不是一個好習慣。你可以使用window.varname來影響你喜歡的任何行爲。 –

+0

我認爲所有的全局變量都是在文檔就緒事件觸發之前設置的,也就是需要變量的時候。另外,我認爲// =只需要加載設置事件處理程序的文件,直到文檔準備好纔會觸發它。 –

回答

0

需要聲明,只有當他們是一個文件的第一線工作,你可以通過創建與您的所有contstants一個js文件解決此問題:

//= require constants.js 
//= require foo.js 

然後constants.js添加您的全局變量

var fooType = 'abc'; 

可能不是一個好主意 - 爲什麼不簡單地把它放在你的foo.js文件的頂部?

+0

謝謝。 'fooType'是影響foo.js行爲的參數。 foo.js被不同的web應用程序使用,它們需要定製foo.js的行爲。這就是爲什麼我需要從foo.js外部傳遞參數。 –