2013-08-01 5 views
1

BackboneJS 프로젝트 내부에서 사용해야하는 작은 자바 스크립트 라이브러리를 만들었습니다. 제 문제는 라이브러리를 사용하는 데 문제가 있습니다. 나는 내가 뭔가 잘못한 것 같아. 접근하려고 할 때, "정의되지 않은"것이있다.RequireJS로 외부 자바 스크립트 라이브러리로드

아래의 일부 코드는 간략하게 설명합니다.

이 라이브러리는 같은 모양 - myLibrary.js :

(function() { 
    var myLibrary = this; 

    var initialize = function() { 
     console.log('initialize'); 
    }; 

    myLibrary.otherFunction = function() { 
     console.log('otherFunction'); 
    }; 
    return myLibrary; 
})(); 

내 requirejs의 설정에서 내 라이브러리를 퍼트 :

requirejs.config({ 
    paths: { 
     jquery: "js/jquery" 
     myLibrary: "js/myLibrary" 
    }, 
    shim: { 
     myLibrary: { 
      deps: ['jquery'] 
     } 
    } 
}); 

을 그리고 나는 BackboneJS 안에 내 라이브러리를 사용하려고 해요 보기

define([ 
    'jquery', 
    'backbone', 
    'myLibrary' 
], function($, Backbone, myLibrary){ 
    'use strict'; 

    return Backbone.View.extend({ 

     initialize: function() { 
      console.log(myLibrary); 
      //myLibrary is undefined here! 
      //I'd like to access myLibrary as an object 
      //to access my functions inside.. 
     } 
    }); 
}); 

라이브러리가로드됩니다. 내 개발자 표시 줄의 네트워크 탭에서 볼 수 있습니다.

무엇이 잘못 되었습니까?

감사합니다.

답변

4

지금 당장 얻은 방법으로는 myLibrary 스크립트가 실제로 실행되고 있지만 리턴 값 (return myLibrary;)은 아무 것도 지정되어 있지 않으므로 삭제됩니다. 당신은 두 가지 중 하나를 수행 할 수

window.myLibrary = (function() { 
    var myLibrary = this; 

    var initialize = function() { 
     console.log('initialize'); 
    }; 

    myLibrary.otherFunction = function() { 
     console.log('otherFunction'); 
    }; 
    return myLibrary; 
})(); 

requirejs.config({ 
    paths: { 
     jquery: "js/jquery" 
     myLibrary: "js/myLibrary" 
    }, 
    shim: { 
     myLibrary: { 
      deps: ['jquery'], 
      exports: "myLibrary" 
     } 
    } 
}); 

또는 더 나은 아직, 실제로 라이브러리 내부 define을 사용합니다 :

당신은 당신의 shim 설정을 전역 객체에 뭔가를 반환 값을 할당하고 업데이트 할 수 있습니다

define(["jquery"], function ($) { 
    var myLibrary = this; 

    var initialize = function() { 
     console.log('initialize'); 
    }; 

    myLibrary.otherFunction = function() { 
     console.log('otherFunction'); 
    }; 
    return myLibrary; 
}); 
관련 문제