2013-04-23 103 views
4

我有一個js文件:在其中爲了流星包括我的js文件

function library_f() { 
} 

function some_f() { 
    library_f(); 
} 

function another_f() { 
    library_f(); 
} 

但代碼看起來醜陋,我決定把我的js文件拆分爲三個一:

one.js:

function library_f() { 
} 

two.js:

function some_f() { 
    library_f(); 
} 

THRE e.js:

function another_f() { 
    library_f(); 
} 

但現在我得到錯誤

library_f() is not defined 

我如何設置的順序,包括我的js文件?

+0

你也可以查看https://github.com/meteor/meteor/blob/master/tools/files.js瞭解更多 – Prashant 2013-04-23 10:50:30

回答

19

docs

  • 文件在您的應用程序的根目錄下的lib目錄下的首次加載時間。 與main。*匹配的文件在所有其他文件之後加載。

  • 子目錄中的文件在父目錄中的文件之前加載,以便最深的子目錄中的文件先加載(在lib之後),並且最後加載根目錄中的文件(除main。*之外)。

  • 在目錄內,文件按字母順序按文件名加載。

這些規則疊加,使得LIB內,例如,文件仍然按字母順序加載;並且如果有多個名爲main.js的文件,則子目錄中的文件會在較早的時間加載。

但它看起來像函數不能被訪問,因爲它們不是全局的。在流星中,除非變量或函數是全局的,否則每個文件的變量/函數都不能被另一個文件訪問。

所以,你會需要聲明你的函數是這樣的:

library_f = library_f() { 
... 
} 

因此,它可以通過其他文件進行訪問。這同樣適用於變量:

var x = true; //Not accessible by other files 
x = true; //Accessible by other files 

var dothis = function() {...} //Not accessible by other files 
dothis = function() {..} //Not accessible by other files 
function dothis() {..} //Not accessible ny other files 
+0

如果你想確保你的文件或文件夾是第一個加載,只是在您的文件名中添加一個下劃線,這種方式將首先加載。 – ncubica 2016-01-24 11:42:55

2

流星舀起所有的JS文件,並將它們放入一個文件,順序不是你有多大的控制權的東西。

我認爲這裏的問題是:你從哪裏調用函數?如果他們立即自我執行,那麼你認爲訂單可能很重要。但是,Meteor通常會將函數加載到DOM中,然後運行它們以響應Meteor.startup(callback)Template.page.rendered(callback)之類的事件。在執行這些示例時,所有的JS文件都將被加載,並且您的函數應該都可以隨時準備好,無論您喜歡什麼順序。

如果你並不想爲他們創建的,但後來,它的價值在瀏覽器控制檯,你可以看到的功能也都一一出現在頁面加載後的DOM檢查,以儘快運行它們。鍵入library_f,看看是什麼回來。