2013-06-18 34 views
2

根據an answer to this question和Meteor文檔,Meteor會自動將所有腳本以最深的第一個遞歸地包含在包文件夾結構中。但是,當我在MyProject/sever文件夾的腳本中定義js類時,如果從頂級.js文件引用該類,則該類未定義。如果我將類定義移動到if (Meteor.isServer)以上的頂級.js文件中,則該類將被正確定義。我在構建或包含來自外部文件的JavaScript時缺少什麼?從其他腳本文件中使用腳本文件的正確方法流星?

編輯: 這個問題比只看我的js類更基礎。我無法調用函數或在流星0.6創建的私有名稱空間中看到任何。顯然,必須有某種方法來引用其他文件中定義的東西,否則大型項目將不可能在流星中使用。

+0

這似乎是流星0.6的js文件範圍的問題。顯然,這並不總是想要的。在客戶端上,使用客戶端/兼容性文件夾會訣竅,但不在服務器上。這種情況下的任何已知解決方法或最佳做法? – snort

+0

它在瀏覽器或服務器上未定義。如果您有一個位於服務器目錄中的文件,它只會在服務器上加載。如果您隨後將其引用到頂級js文件中,該文件將在服務器和客戶端上加載,則由於/ server中的文件僅在服務器上運行,因此在客戶端上它將被定義爲未定義。 –

+0

它在服務器上未定義,並在if(Meteor.isServer){}塊中被引用。 – snort

回答

2

正如我所懷疑的,這與我對javascript(愚蠢黑客)類聲明和全局性的誤解有關。更改:

function ClassFoo(){ 
    this.bar = function(){} 
} 

ClassFoo = function ClassFoo(){ 
    this.bar = function(){} 
} 

通過使ClassFoo全球固定它。 FWIW,請注意,​​將不起作用,因爲它然後成爲自動生成的閉包名稱空間的本地。得愛JavaScript的怪癖。

相關問題