出于测试目的,我试图删除一些amd模块并从服务器重新加载更新版本 - 目的是不刷新浏览器。
我目前正在执行以下操作,但浏览器仍然无法从网络重新加载项目。
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的所有引用的机制?
任何帮助非常感谢
答案 0 :(得分:8)
我们目前正在尝试此实施:
require.onResourceLoad = function(context, map)
{
require.undef(map.name);
};
目前尚未出现任何问题。
编辑:IE并不关心此修复程序。 Chrome和FF很好。
此外,您应该在PhpStorm中尝试实时编辑。奇迹般有效。可以看到一个演示here。仅限Chrome。
答案 1 :(得分:1)
这个答案类似于user1903890,但我认为很容易遵循其他实现。
基本上我们必须在init函数中封装index.html中指定的main.js requirejs控制器。一旦定义了,那么我们通常会调用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();
我们还需要并使用require.onResourceLoad函数来存储参与requirejs应用程序的所有文件
var all=[];
require.onResourceLoad = function (context, map, depArray) {
all.push(map.name);
};
我们需要一个reset requirejs配置函数来删除requirejs的实际实例,我们将使用require.undef函数来实现:
function end(){
console.log("--------------------------- END requirejs:");
all.map(function(item){
require.undef(item);
});
};
这就是全部!
稍后从我们的代码中我们可以强制重新加载应用程序,而无需重新加载浏览器,只调用end()函数和init_rquirejs()函数。例如,在jquery click事件中:
$('#init_button').on('click', function(){
end();
init_requirejs();
});
演示代码在 https://github.com/juanantonioruz/requirejs-force-reload
在线版 https://dl.dropboxusercontent.com/u/8688858/requirejs-force-reload/project.html
我希望这个解决方案适合你!
涓