我试图在我的一个模型中加载脚本:
attached(){
$.ajax({
type: 'GET',
url: '/lib/zxcvbn/dist/zxcvbn.js',
dataType: 'script',
cache: true
}).done(function(script, textStatus) {
console.log('loaded script');
});
}
done
回调被击中但是出口zxcvbn
在全球范围内不可用。
在普通的html页面(即不是aurelia)中运行的完全相同的代码工作正常(zxcvbn在全局上下文中可用)
我知道这不是在aurelia中加载外部JS文件的推荐方法,但是脚本非常大,只在我的应用程序中的一个位置需要。 zxcvbn州的文件:
zxcvbn检测并支持CommonJS(node,browserify)和AMD(RequireJS)。如果没有这些,它会向全局命名空间添加单个函数zxcvbn()。
我的aurelia应用程序正在使用RequireJS;如果它没有加载到全局命名空间,它在哪里加载,我该如何引用它?
根据您提供的信息,zxcvbn
检测到存在AMD加载程序(RequireJS)并调用define
将自己注册为AMD模块。
由于页面上已经有RequireJS,因此可以通过调用require
替换jQuery调用,并传递完整路径:
require(['/lib/zxcvbn/dist/zxcvbn.js'], function (zxcvbn) {
// Do something with zxcvbn ...
});
由于脚本将自身注册为AMD模块,因此参数zxcvbn
将保存模块的值。
请注意,当您传递以正斜杠开头的路径时,RequireJS将按原样使用路径:这会绕过您的RequireJS配置(例如,baseUrl
,paths
,map
未应用等),并且RequireJS不会添加.js
扩展名,所以它需要有扩展名。