从 <script> 标签访问 requirejs 模块
Accessing requirejs module from <script> tag
我目前有一个位于远程服务器上的 requirejs 模块,如下所示,它定义了一些 backbone 视图、模型
define(['...'], function() {
......
return {
model : suggestion_model,
view : suggestion_view
};
});
正在动态加载到另一个文件中
let script = $("<script>").attr({
src: "http://localhost:9000/assets/javascripts/autocomplete/autocomplete-model-view.js",
});
console.log(script);
$("head:first").append(script);
当我转到我的标签时,我看到文件已加载,但我无法访问要在任何代码中使用的模块。
我怎样才能在其他一些文件中实际访问这些定义的 requirejs 模块?
您可能无法通过直接将它们注入脚本标记来访问远程 requirejs 模块。您可以尝试以下步骤来访问它们。
假设我们有一个名为 remotemodule
的远程模块
define(['remotemodule'], function() {
return {
model : function(){
return "Im a remote model";
},
view : function(){
return "Im a remote view";
}
};
});
要在浏览器中访问它..
您需要先将 requirejs
脚本添加到您的 html 中。
<script src="https://requirejs.org/docs/release/2.3.6/minified/require.js" type="text/javascript"></script>
这应该会给你一个全局对象 require
。您可以在 require
上调用 config
函数,通过向脚本指定 path
来定义 remotemodule
。
require.config({
paths: {
"remotemodule": "https://raggedlostcone.nithinthampi.repl.co/"
}
});
然后你可以调用require(["remotemodule"], function callback)
来加载脚本。一旦加载脚本,就会执行回调。
require(["remotemodule"], function(loaded_script){
console.log(loaded_script);
document.getElementById("remotemodule").innerText = loaded_script.model();
})
下面是一个简单的演示。
require.config({
paths: {
"remotemodule": "https://raggedlostcone.nithinthampi.repl.co/"
}
});
require(["remotemodule"], function(loaded_script){
console.log(loaded_script);
document.getElementById("remotemodule").innerText = loaded_script.model();
})
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script src="https://requirejs.org/docs/release/2.3.6/minified/require.js" type="text/javascript"></script>
</head>
<body>
<h1 id="remotemodule">
loading...
</h1>
</body>
</html>
我目前有一个位于远程服务器上的 requirejs 模块,如下所示,它定义了一些 backbone 视图、模型
define(['...'], function() {
......
return {
model : suggestion_model,
view : suggestion_view
};
});
正在动态加载到另一个文件中
let script = $("<script>").attr({
src: "http://localhost:9000/assets/javascripts/autocomplete/autocomplete-model-view.js",
});
console.log(script);
$("head:first").append(script);
当我转到我的标签时,我看到文件已加载,但我无法访问要在任何代码中使用的模块。
我怎样才能在其他一些文件中实际访问这些定义的 requirejs 模块?
您可能无法通过直接将它们注入脚本标记来访问远程 requirejs 模块。您可以尝试以下步骤来访问它们。
假设我们有一个名为 remotemodule
define(['remotemodule'], function() {
return {
model : function(){
return "Im a remote model";
},
view : function(){
return "Im a remote view";
}
};
});
要在浏览器中访问它..
您需要先将 requirejs
脚本添加到您的 html 中。
<script src="https://requirejs.org/docs/release/2.3.6/minified/require.js" type="text/javascript"></script>
这应该会给你一个全局对象 require
。您可以在 require
上调用 config
函数,通过向脚本指定 path
来定义 remotemodule
。
require.config({
paths: {
"remotemodule": "https://raggedlostcone.nithinthampi.repl.co/"
}
});
然后你可以调用require(["remotemodule"], function callback)
来加载脚本。一旦加载脚本,就会执行回调。
require(["remotemodule"], function(loaded_script){
console.log(loaded_script);
document.getElementById("remotemodule").innerText = loaded_script.model();
})
下面是一个简单的演示。
require.config({
paths: {
"remotemodule": "https://raggedlostcone.nithinthampi.repl.co/"
}
});
require(["remotemodule"], function(loaded_script){
console.log(loaded_script);
document.getElementById("remotemodule").innerText = loaded_script.model();
})
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script src="https://requirejs.org/docs/release/2.3.6/minified/require.js" type="text/javascript"></script>
</head>
<body>
<h1 id="remotemodule">
loading...
</h1>
</body>
</html>