2011-01-22 3 views
66

방금 ​​Require.JS로 작업하기 시작 했으므로 올바른 사용법과 사용법이 명확하지 않습니다. 그럴 경우.Require.JS를 사용할시기와 방법 이해

다음은 현재 Require.JS로 설정 한 내용입니다. 두 가지 기능, functionA()functionB()이 있습니다. 이 두 기능 모두 추가 기능이 필요합니다 (functionC()).

필요한 경우, 즉 functionA() 또는 functionB()를 호출 할 때만 functionC()를로드하려고합니다.

functionC.js

functionC(){ 
    //do stuff 
} 

functionA.js

functionA(){ 
    define(['functionC'],function(){ 
    //functionC() is loaded because it is listed as a dependency, so we can proceed 
    //do some functionA() stuff 
    }); 
} 

functionB.js

functionB(){ 
    define(['functionC'],function(){ 
    //functionC() is loaded because it is listed as a dependency, so we can proceed 
    //do some functionB() stuff 
    }); 
} 
: 그래서 나는 다음과 같은 파일이

그럼, 올바르게 설정 되었습니까? 그리고 내가 같은 페이지에서 functionA()와 functionB()를 호출하게되면, 둘 다 functionC.js 파일을로드하기 때문에 추가 작업이 수행되고 있습니까? 그렇다면 그게 문제입니까? 그렇다면 functionC.js가 아직로드되었는지 확인하고로드되지 않은 경우에만로드 할 수 있도록 설정하는 방법이 있습니까? 마지막으로 Require.JS를 적절하게 사용합니까?

답변

44

define()은 모듈을 정의하는 데에만 사용해야합니다. ,

  • require([])가 비동기 :

    functionA.js

    functionA(){ 
        require(['functionC'],function(functionC){ 
        //use funcC in here to call functionC 
        }); 
    } 
    

    일부 노트 : 코드 조각을 동적으로로드해야 위의 예를 들어, require() 사용하는 것이 더 적합 따라서 functionA의 호출자가 해당 함수의 반환 값을 기대하는 경우 오류가 발생할 수 있습니다. functionAfunctionA이 작업을 완료했을 때 호출되는 콜백을 허용하는 것이 가장 좋습니다.

  • 위의 코드는 functionA에 대한 모든 호출에 대해 require()을 호출합니다. 그러나, 첫 번째 호출 후에는 벌점이 없으며 functionC.js을로드합니다. 한 번만로드됩니다. 처음으로 require()이 호출되면 functionC.js을로드하지만 나머지 시간은 RequireJS가 이미로드되어 있다는 것을 알고 있기 때문에 을 다시 요청하지 않고 function(functionC){} 함수를 호출합니다.
+1

감사합니다 - 그것은 많은 도움이됩니다. define()과 require()는 설명이 필요한 것이었고, 다른 두 개의 요점은 정말 도움이됩니다. 첫 번째 요점은 RequireJS의 비동기 특성을 올바르게 처리하는 방법, 즉 더 잘 이해할 필요가있는 부분이라고 생각합니다. – maxedison

21

당신은 RequireJS 여기에 자바 스크립트 모듈화에 대한 자세한 내용은 찾을 수 있습니다 당신의 응답을 JavaScript modularity with RequireJS (from spaghetti code to ravioli code)

+4

상위 링크 - 수많은 자습서를 읽는 것이 훨씬 좋습니다. 명확하고 간결.+1 –

+11

링크가 이론적으로 질문에 대답 할 수도 있지만 여기에 답의 핵심 부분을 포함하고 참조 용 링크를 제공하는 것이 바람직합니다 (http://meta.stackexchange.com/q/8259). – JJJ