我构建了一个我需要在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..
}
});
});
已加载库。我可以在开发人员栏的“网络”标签中看到它。
如果你知道这里有什么问题吗?
感谢。
答案 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;
});