使用RequireJS加载外部JavaScript库

时间:2013-08-01 20:50:46

标签: javascript backbone.js requirejs

我构建了一个我需要在BackboneJS项目中使用的小型JavaScript库。 我的问题是,我有一个问题是使用该库。我想我做错了什么,当我试图访问它时,我得到了一个“未定义”。

下面的一些代码,我简化了它。

库看起来像那样 - 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..
        }
    });
});

已加载库。我可以在开发人员栏的“网络”标签中看到它。

如果你知道这里有什么问题吗?

感谢。

1 个答案:

答案 0 :(得分: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;
});