我正在尝试在我的一个模型中加载脚本:
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;如果它没有加载到全局命名空间,它在哪里加载,我该如何引用它?
答案 0 :(得分:1)
根据您提供的信息,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
扩展名,因此需要具有扩展名。