2013-05-14 10 views
32

メテオールで のアプリケーションを作成したいと思っています。最初にロードするマニュアルは のサブディレクトリにあり、アルファベット順に従っています。私はそれを呼びたい、同じファイルで宣言した場合 私のファイル構造は、このようなものです...Meteorを使用して別のファイルから関数を呼び出す

/server 
/lib 
/client 
    /lib 
     game.js -> already starts declaring the function "makeBoard(){}" 
    /template.js -> where the function "makeBoard()" is called. 

は、このように表示されるエラー関数は「makeBoard()」が存在しないこと、のみ動作します。私がファイル "game.js"を "template.js"と同じディレクトリに移動しても、それは起こります。 Meteor上の異なるファイルにあるリソースへの参照を正しく作成するにはどうすればよいですか?

答えて

46

makeBoard = function() { ... }で関数を定義します。

var bar = ...で定義された変数と同様に、function foo() { ... }で定義された関数はファイルに対してローカルです。

+0

私の問題を修正しました。ありがとうございます。 – Andy

+0

EMCA6リリースでは、特にjavascriptコードに厳密な ''タグを使用していますが、このソリューションはコンパイルされません。私は強くその理由のために@ Shwaydoggの解決策を提案します。 – nchinda2

+0

これはCLIENT側でのみ機能します。 Meteor.MyFunction.Method() – Andy

52

avitalが示唆しているように、グローバルに定義された変数を使用すると動作しますが、推奨されるコードデザインの選択肢(see JS mistake 1 listed here)ではありません。そして、JS他のファイルにあなたがMeteor.myFunctions.makeBoard()を呼び出すことができます

Meteor.myFunctions = { 
... 
    makeBoard : function() { ... }, 
... 
} 

は、代わりにあなたのlibディレクトリにあなたがファイルを作成することができます。 Meteorはlibのjsファイルが他のディレクトリの前にロードされていることを保証しているので、関数はすでにロードされているので、libディレクトリで実行する必要があります。

+3

を使って、サーバーのサイドフィックスに関するShwaydoggの答えをご覧ください。複数のファイルから関数を共有している場合、これが可能になります: Meteor ['myFunctions'] = Meteor ['myFunctions'] || {}; Meteor ['myFunctions'] ['createinstanceclass'] = function(){ return new instanceclass(); } Meteor ['myFunctions'] = Meteor ['myFunctions'] || {}; Meteor ['myFunctions'] ['createsolutionclass'] = function(){ 新しいsolutionClass()を返します。 } ご同意いただけますようお願い申し上げます。あなたがそれをより良くする方法を説明してください:) –

+0

ありがとうございます。最後にカスタムサーバー側コードを実行しました。私はクライアント上でこれを実行しようとしましたが、期待通りに動作しませんでした。素晴らしい。 – Andy

+0

ありがとう、助けてください – jremi

関連する問題