2012-05-11 1 views
2
require.config({ 
    paths: { 
     jquery: 'libs/jquery', 
     underscore: 'libs/underscore', 
    } 
}); 
define([ 
    'jquery', 
    'underscore', 
    ], function($,_){ 
     var test = _.template("hello: <%= name %>",{name:"warren"}); 

}); 

jQuery를로드하고 내가 왜이 오류를 얻고, 밑줄 requirejs를 사용하여 위의 코드 ...Underscore.js catch되지 않은 형식 오류 : 널 (null)의 방법 '템플릿'을 호출 할 수 없습니다

Uncaught TypeError: Cannot call method 'template' of null 

모든 JS을 감안할 때 로드 중입니다 ... 오류가 _template 행을 가리 킵니다. 이것은 나를 미치게합니다. ...

답변

7

requireJS와 함께 사용할 수 있도록 밑줄 라이브러리를 묶었습니까?

당신은 쓸 때 :

define([ 
    'jquery', 
    'underscore', 
    ], function($,_){ 
     var test = _.template("hello: <%= name %>",{name:"warren"}); 

}); 

'_'변수 (콜백 함수의 두 번째 인수가) 밑줄 라이브러리의 수출 할당 (두 번째 종속성이 지정).

나는 requireJS에 대한 패키지가 아닌 밑줄의 원래 버전을 사용했다고 생각합니다. 은 underscore.js 파일에서 시작 부분에 다음 줄을 추가 :

define(function() { 

과 끝이 라인 :

return _;}); 

따라서, 수출이 잘 구성되어 있습니다.

또 다른 가능한 해결책은 전역 '_'변수를 사용하는 것입니다. 필요한 것은 콜백의 두 번째 인수를 제거하는 것입니다.

define([ 
    'jquery', 
    'underscore', 
    ], function(){ 
     var test = _.template("hello: <%= name %>",{name:"warren"}); 

}); 

거기에서 브라우저는 밑줄로 정의하고, 콜백이 호출 될 때 설정됩니다 '_'글로벌 변수를 사용합니다.

jQuery와 동일한 동작이 필요합니다.

+0

이것은 당신이 옳다고 제안 할 것입니다 : http://stackoverflow.com/a/8156341/479863 –

+0

또한 AMD compat 인 포크 버전 - https://github.com/amdjs/underscore –

+0

감사합니다. 일했다! 내가 언급 한 것처럼 밑줄 파일에 추가하는 작업이 끝났습니다. – wcolbert

관련 문제