2013-08-01 2 views
1

Я построил небольшую библиотеку javascript, которую мне нужно использовать внутри проекта BackboneJS. Моя проблема в том, что у меня есть проблема с использованием библиотеки. Я думаю, что я сделал что-то не так, когда я пытаюсь получить к нему доступ, у меня есть «неопределенный».Загрузка внешней библиотеки javascript с 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;) отбрасывается, потому что оно ничем не назначено. Вы можете сделать одну из двух вещей:

Вы можете присвоить возвращаемое значение то на глобальный объект и обновить shim конфигурации:

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 внутри вашей библиотеки:

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

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

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