2013-05-14 2 views
32

하위 디렉토리에있는 하위 디렉토리에있는 매뉴얼을 읽고 이해 한 다음 Meteor에서 응용 프로그램을 만들고 싶습니다. 그리고 알파벳 순서를 따르십시오. 내가 그것을 호출 할 동일한 파일에 선언하는 경우 내 파일 구조가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

이것은 클라이언트 쪽만 작동합니다. 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() { return new solutionClass(); } 동의하는 경우 답변에 추가하십시오. 그렇지 않다면 더 나은 방법을 설명하십시오 :) –

+0

감사합니다. 마지막으로 일부 사용자 정의 서버 측 코드가 실행 중입니다. 클라이언트에서 이걸 실행 해 보았는데 예상대로 작동하지 않았습니다. 환상적. – Andy

+0

감사합니다. – jremi