我正在努力将手动编写脚本标记的应用程序迁移到使用YUI3加载程序来管理脚本依赖项的应用程序。我遇到了像jQuery这样不应加载两次的脚本的问题,因为在某些情况下遗留代码会丢弃页面上的脚本,然后YUI加载器会再次加载它。有没有办法防止这种情况发生?看起来加载器应该能够在注入新标记之前使用与它要创建的src相同的src查询脚本标记。
答案 0 :(得分:0)
大约3/4的this video您将看到如何加载未为YUI编写的外部模块,并通知加载器它已加载,因此它不会尝试两次。基本上,您监视加载器的onProgress事件以及它何时触发,您使用要为模块提供的名称调用YUI.add(),然后使加载程序将该模块标记为已加载。
答案 1 :(得分:0)
事实证明,实现此目的的一种方法是主动调用模块名称上的Y.add()。这适用于不是用Y.add()(例如jQuery插件)定义的模块。但是,如果使用Y.add()定义的模块执行此操作,则存在潜在的竞争条件。例如,请考虑以下顺序:
修复方法是使用以下脚本:
var preloadedModules = ['a', ... ]; // list of module scripts already on the page
, noop = function (Y) { }, version = '@VERSION@', i, len, moduleName;
for (var i = 0, len = preloadedModules.length; i < len; ++i) {
moduleName = preloadedModules[i];
if (!YUI.Env.mods[moduleName]) { // avoids overwriting YUI module definitions
YUI.add(moduleName, noop, version);
}
}