Requirejs 要求js删除定义以强制重新加载
出于测试目的,我试图删除一些amd模块并从服务器上重新加载更新版本,目的是不刷新浏览器 我目前正在执行以下操作,但浏览器仍无法从网络重新加载项目Requirejs 要求js删除定义以强制重新加载,requirejs,js-amd,Requirejs,Js Amd,出于测试目的,我试图删除一些amd模块并从服务器上重新加载更新版本,目的是不刷新浏览器 我目前正在执行以下操作,但浏览器仍无法从网络重新加载项目 var scripts = document.getElementsByTagName('script'); var context = require.s.contexts['_']; for (var key in context.defined) { if(key.indexOf("tests")>-1){ requirejs.un
var scripts = document.getElementsByTagName('script');
var context = require.s.contexts['_'];
for (var key in context.defined) {
if(key.indexOf("tests")>-1){
requirejs.undef(key);
for (var i = scripts.length - 1; i >= 0; i--) {
var script = scripts[i];
var attr = script.getAttribute('data-requiremodule')
if (attr === key){
script.parentNode.removeChild(script);
}
}}
它从上下文中删除引用并成功删除脚本标记。
但是,唉
有人知道清除requirejs中所有引用的机制吗
非常感谢您的任何帮助我们目前正在尝试此实现:
require.onResourceLoad = function(context, map)
{
require.undef(map.name);
};
到目前为止还没有出现任何问题
编辑:IE不太关心这个修复。然而,铬和FF是好的
另外,您应该尝试在PhpStorm中进行实时编辑。工作起来很有魅力。可以看到一个演示。Chrome浏览器。这个答案类似于用户1903890,但我认为它很容易实现其他实现 基本上,我们必须将index.html中指定的main.js requirejs控制器封装在init函数中。一旦定义好了,我们就调用这个init函数来初始化requirejs
function init_requirejs(){
console.log("--------------------------- INIT requirejs:");
require([ "helpers/util"], function(util) {
var count=0;
$('#content').empty();
$('#content').append("<input type='button' id='increment_button' value='click to increment the counter'>");
$('#content').append("<h1 id='the_counter'>0</h1>");
$('#content').append("<br><br><input type='button' id='init_button' value='click to initialize requirejs files'>");
$('#increment_button').on('click', function(){
count++;
$('#the_counter').text(count);
});
$('#init_button').on('click', function(){
end();
init_requirejs();
});
util();
});
};
init_requirejs();
我们需要一个reset requirejs配置函数来删除requirejs的实际实例,我们将使用require.unde函数来完成:
function end(){
console.log("--------------------------- END requirejs:");
all.map(function(item){
require.undef(item);
});
};
就这些
稍后,在我们的代码中,我们可以强制重新加载应用程序,而无需重新加载浏览器,只需调用end()函数和init_rquirejs()函数。例如,在jquery单击事件中:
$('#init_button').on('click', function(){
end();
init_requirejs();
});
演示的代码在中
还有一个在线版本
我希望这个解决方案对你有用
Juan嗨,Chin,你检查我的回答了吗?我认为它解决了你的问题,不是吗?
$('#init_button').on('click', function(){
end();
init_requirejs();
});