2013-11-02 5 views
1

나는 php/codeigniter 기반의 대규모 웹 사이트에서 javascript를 업데이트하려고합니다. 그것은 특정 페이지에로드되는 코드에 대해 많은, 많은 PHP 부분을 가지고 있지만 단 하나의 바닥 글, 헤더가 있습니다. 대부분의 부분 클래스에는 자바 스크립트를로드하기위한 인라인 스크립트 태그가 있습니다. 이 문제는 수정해야하며 사이트가 여러 모듈에서 여러 번 사용되는 매우 모듈 식이기 때문에 require.js는 꽤 좋은 솔루션 인 것 같습니다.다른 페이지에서 require.js 모듈을 인스턴스화하는 방법은 무엇입니까?

그래서 자바 스크립트를 인스턴스화합니다. 일반적으로이 작업을 수행합니다.

<script type="javascript" src="../js/scriptname.js"> 
<script type="javascript"> 
    DP.scriptname.init(parameters) 
</script> 

나는 이것에서 벗어나서 js가 필요로하는 js에 대한 단일 엔트리 포인트를 갖고 싶습니다.

제 질문은 이것입니다 : require를 사용하여 특정 페이지에 대해 자바 스크립트를 인스턴스화하는 가장 좋은 방법은 무엇입니까? 부분 스크립트에 계속 스크립트를 포함시켜야하고 그런 다음 해당 특정 페이지에 대한 필수 모듈을 작성한 다음 this과 같은 데이터 주 스크립트에 모두 포함해야합니까? Backbone과 Marionette도 사용할 계획이지만 Backbone 라우터를 사용하여 해시 URL 설정과 같은 작업을 수행 할 수는 없습니다. 필요 모듈을 인스턴스화하기 위해 URL을 사용해야합니까?

좋아, 누군가 도와 드릴 수 있기를 바랍니다. 내 경험은 일반적으로 단일 페이지 웹 사이트를 구축하는 데있었습니다. 이것은 다릅니다. 감사합니다

답변

1

글쎄, 내가 제대로 질문을 이해한다면, 당신은 같은 방법으로 JS 필요 사용할 수 있습니다.

우선 모듈 이름과 구체적인 파일 간의 매핑을 설명하는 구성을 작성하십시오. 예를 들어 :

requirejs.config({   
    baseUrl: 'js/modules' // by default load any module using this path 
}); 

기존 모듈을 리팩토링과 AMD 형식으로 조정해야 그 후이 뭔가를해야합니다이 단계의 결과로

(http://requirejs.org/docs/whyamd.html 참조) (의 파일에 가정 해 봅시다 'JS/모듈/scriptname.js') :

// module has the same name as the file, which contains it - "scriptname" 
define(function() { 
    // define the module value by returning a value 
    return function() {}; 
}); 

그리고 마지막 단계로 당신이 당신의 인라인 스크립트를 리팩토링 수와 같은 방법으로이 모듈을 사용

<script type="javascript"> 
    // when we place name of the module as a first argument of the "define" 
    // function, Require JS find file that contains it and load it asynchronously 
    define(["scriptname"], function (scriptname) { 
     // "scriptname" now contains value that we recieve from the module definition 
     scriptname.init(parameters); 
    }); 
</script> 

희망이 도움이됩니다.

참고. 공식의이 섹션에 따라 내 솔루션은 JS 문서 필요 : http://requirejs.org/docs/api.html#jsfiles

+0

감사 V2P,하지만이 도움이 어떻게 표시되지 않습니다 .질문 : 프로젝트의 전체 스크립트에 대해 하나의 스크립트 태그 만 가지고있는 동안 내가 시작하고자하는 URL에서만 질문의 스크립트 초기화를 시작하려면 어떻게합니까? 백본 마리오넷 라우터를 사용하여 내 URL을보고 필요한 경우 적절한 코드를 실행해야합니까? 더 많이 생각할수록 이것이 require.js 질문에 반대되는 백본으로 보인다. –

0

이 질문이 많이 올 것 같다을, 그래서 도움이 될 수 있습니다 어떤 자원을 가리키는 것이다 : RequireJS가 작동 않는 방법

+0

그러나 이러한 솔루션을 사용하면 코드베이스에 여러 개의 스크립트 태그가 있어야하지 않을 것입니다. (단 하나의 바닥 글에 부분적으로 보관하는 것과 반대입니다.) 부분적으로 스크립트 태그를 사용하지 않아도됩니다. 내 페이지 중간에 어딘가에 넣으세요. 나는 이것을하는 것을 정말로 좋아하지 않는다. 사물을 정리할 다른 방법이 없습니까? Simon에게 감사드립니다. –