나는 "새로운"브라우저 - 또는에 "오래된"브라우저 스타일의 모듈 구조에서 프로젝트를 변경하고있어 - 서버 사이드 자바 스크립트 모듈 구조는 require.js입니다. 내가 오프 사이트를 사용하고 클라이언트에 호출 방법
는 jQuery를 호스팅, 그래서 나는 그들이 README의 "use priority config" 기술에주는 예에서 시작 :<title>My Page</title>
<script src="scripts/require.js"></script>
<script>
require({
baseUrl: 'scripts',
paths: {
jquery: 'http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min',
jqueryui: ...,
...
... // bunch more paths here
},
priority: ['jquery']
}, [ 'main' ]);
</script>
이 실제로 모든 권리 노력하고 있습니다. 하지만 메인에서 HTML 웹 페이지로 기능을 내보내고 싶습니다. 예를 들어 :
<a class="button" href="#" onclick="MyApi.foo();">
<img src="foo.png" alt="foo" />Click for: <b>Foo!</b>
</a>
는 AMD 모듈 패턴으로 피팅 전에, 나는 세계 공간에서 사전 개체를 만들어 내 다양한 파일의 기능을 노출했던 :
// main.js
var MyApi = {};
jQuery(document).ready(function($) {
// ...unexported code goes here...
// export function via MyApi
MyApi.foo = function() {
alert("Foo!");
};
});
을하지만 나도 몰라 require.js의 올바른 접근 방식은 무엇입니까? HTML에 <script>
태그 안에 require
문을 넣은 다음 웹 페이지에서 사용할 수 있도록 모듈 이름을 지정해도됩니까? 아니면 항상 $('#foobutton').click(...)
과 같이 main.js 내부에서 동적으로 수행해야합니까?
안녕하세요, 고마워요. (이 프로젝트로 돌아가서 대답을 자세히 살펴보십시오.) onclick에 코드를 넣는 것이이 방법론에 맞지 않는 이유를 단어로 표현합니다. 핸들러는 페이지의 HTML에 직접로드되는 모든 .js 파일에서 동일한 가져온 이름을 갖기 위해 호출하는 API를 필요로합니다. 그러나이 토큰에 의해 ...이 패턴에서, page.js가 jquery 매핑을'$'로 명시하는 대신에, foo가 그것을 가져온 것만으로 상속받는 것이 아니라면? – HostileFork
필자는 항상 모듈을 재사용 가능하고 분류 된 코드라고 생각했습니다. 그러나이 접근 방식을 사용하면 모든 것이 모듈로 던져 져야하며 이벤트 바인딩과 같은 실제 모듈과 실제 모듈 간의 명확한 구분이 없습니다. 다른 방법이 없습니까? – backdesk
질문에 DOM은 전역 MMyApi 개체에 의존합니다. 이 대답에서 페이지 모듈은 DOM에도 의존하며 이는 글로벌입니다. 어떤 종류의 의존성이 있어야합니다. 아마도 어느 것이 주관적인 선택일까요? –