2012-03-21 2 views
8

난 그냥 RequireJS로 시작,하지만 난 이런 식으로 두 가지를 정의()가 하나 개의 js 파일을 사용하고자하는 부분에 붙어 :requirejs, 하나 개의 파일에 두 개의 클래스는

을 파일 이름 :

require(['jquery', 'test', 'test2'], function ($, t1, t2) { 
    console.log(t1); 
}); 

그것은 2 PARAM을 찾을 않습니다, 일 : 나는 또한 자동으로 RequireJS 프레임 워크에 의해로드 된 부트 스트랩, JS 파일이

define('test1', ['jquery'], function() { 
    return { 
     method1 : function() { 
      console.log("test1 - method 1"); 
     }, 

     method2 : function() { 
      console.log("test1 - method 2"); 
     } 
    } 
}); 

define('test2', ['jquery'], function() { 
    return { 
     method1 : function() { 
      console.log("test2 - method 1"); 
     }, 

     method2 : function() { 
      console.log("test2 - method 2"); 
     } 
    } 
}); 

을 test.js e 'test'파일. 'null'을 반환합니다. 'test2.js'라는 파일을 찾기 때문에 'test2'를 찾을 수 없습니다. 사실 나는 다음과 같이하고 싶다 :

require(['jquery', 'test.test1', 'test.test2'], function ($, t1, t2) { 
    console.log(t1); 
}); 

어쨌든 나는 두 개체에 대한 처리기를 얻고 싶다. 내가 도대체 ​​뭘 잘못하고있는 겁니까??

+0

입도는 파일 수준이다. 파일의 일부는 가져올 수 없습니다. "test.js"를 가져 오면 두 객체를 모두 가져올 수 있습니다. – Pointy

+0

@Pointy 그렇다면 'test'가 null 객체를 반환하기 때문에 여전히 잘못된 코드가 있습니다. – w00

+0

아 ... 물론 RequireJS 문서에 따르면, 주어진 .js 파일에는 ** 하나의 ** 모듈 만 있어야합니다. – Pointy

답변

16

이렇게 두 개의 다른 모듈을 내보낼 수 없습니다. 당신이 '테스트'의 "서브 모듈"로 유지하려면 올바른 방법을 수행하는 것입니다 :

define('test', ['jquery'], function() { 
    var exports = {}; 
    exports.test1 = { 
     method1 : function() { 
      console.log("test1 - method 1"); 
     }, 

     method2 : function() { 
      console.log("test1 - method 2"); 
     } 
    }; 

    exports.test2 = { 
     method1 : function() { 
      console.log("test2 - method 1"); 
     }, 

     method2 : function() { 
      console.log("test2 - method 2"); 
     } 
    }; 

    return exports; 
}); 

그런 다음 당신이 할 수 있습니다

require(['test'], function (test) { 
    var test1 = test.test1; 
}); 
+0

거기에 정의 된 두 개의 서브 모듈이 있고 코드에서 모듈 중 하나만 사용합니다. r.js 최적화 프로그램은 모듈 중 하나만 최종 컴파일 된 파일로로드합니까? – Skurpi

관련 문제