这个答案类似于 user1903890 但我认为它很容易遵循其他实现。
基本上,我们必须将 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();
我们还需要并使用 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 点击事件中:
$('#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
我希望这个解决方案对你有用!
胡安