出于测试目的,我想删除一些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所有引用?
任何帮助非常赞赏
目前,我们正在尝试这样实现:
require.onResourceLoad = function(context, map)
{
require.undef(map.name);
};
没有问题,迄今已浮出水面。
编辑:IE不会在意此修复程序。 Chrome和FF是好的但是。
此外,你应该尝试在PhpStorm实时编辑。 奇迹般有效。 一个演示可以看到在这里 。 铬只虽然。
这个答案是类似user1903890但我认为它容易跟随作出其他的实现。
基本上,我们在main.js requirejs控制器在我们的index.html指定的初始化函数来封装。 一旦它的定义,那么我们称这个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);
};
我们需要一个复位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
我希望这个解决方案为你工作!
胡安