我有一个淘汰/需要的应用程序,我正在努力缓存一个特定的文件。可悲的是,这个文件破坏了所有其他javascript文件的缓存。设置可能有点奇怪:
每个视图只是绑定一个淘汰视图模型。它需要require库和系统特定区域的主脚本:
<script data-main="scripts/user" src="~/Scripts/lib/require.js"></script>
上面要求的scripts / user.js文件需要公共文件(包含require设置)和主viewmodel脚本:
require(['./Common'], function (common) {
require(['userMain']);
})
scripts / user / userMain.js文件绑定viewmodel并需要视图级别所需的任何内容(例如自定义绑定处理程序)。
define(function (require) {
require(['ko', 'userViewModel'], function (ko, userViewModel) {
var userVm = new userViewModel(false);
userVm.initialise();
// bound to the wrapper to stop jquery dialog bindings being applied twice
ko.applyBindings(userVm, document.getElementById('pageWrapper'));
});
});
然后我们有common.js:
require.config({
baseUrl: './',
paths: {
'userMain': './Scripts/user/Main',
'userAjax': './Scripts/user/userAjax',
'userBasicDetails': './Scripts/user/userBasicDetails',
'userExchangesModel': './Scripts/user/userExchangesModel',
'userModel': './Scripts/user/userModel',
'userReportAccessModel': './Scripts/user/userReportAccessModel',
'usersModel': './Scripts/user/usersModel',
'userViewModel': './scripts/user/userViewModel',
... etc
,
urlArgs: "bust=" + (new Date()).getTime()
文件夹中的每个脚本都需要在其自己的模型中需要的任何内容。
然后设置脚本结构:
scripts\common.js
scripts\user.js
scripts\user\main.js
scripts\user\userAjax
scripts\user\etc...
此设置允许我从其他文件夹引用脚本,而不指定文件在common.js以外的任何位置。缺点是所有js文件都有一个共同的参考,但我可以忍受。 作为一个例子,在'user'('scripts \ report \','scripts \ client'等)的同一级别有4或5个文件夹,如果我想创建 来自这些文件夹中的任何脚本的用户模型我可以简单地“定义(['userModel'],function(userModel)”并且常见将告诉需要去哪里找到该文件。这个系统工作正常,允许我移动随意的文件只会在一个地方改变它们的路径。
当我在common.js中添加新脚本或更改路径时,问题就出现了。由于设置原因,所有其他人都要求破产 通常,公共文件本身会被缓存,所以我必须在新的common.js文件被拾取之前破坏用户的chrome缓存。这显然是交付时的一个大问题 - 页面失败,因为它们找不到新脚本,因为它不存在于同一文件夹中,并且公共已缓存。
任何人都可以建议一种自动破坏common.js或将路径配置移动到单独的必需文件中的方法,以便urlArgs胸围会为我做这件事吗?
非常感谢。
答案 0 :(得分:4)
在加载RequireJS的script
元素之前,添加以下代码:
<script>
require = {
urlArgs: "bust=" + (new Date()).getTime()
};
</script>
RequireJS将选择此作为其初始配置,并通过data-main
或任何其他方式加载任何模块,bust
参数。
最好从随后的urlArgs
来电中删除require.config
。它将覆盖之前的选项,因此bust
的值将发生变化。通常,模块由RequireJS加载一次且仅加载一次,因此 不会发生同一模块由具有两个不同bust
值的同一页面加载。但有些情况我不确定(例如,使用require.undef
取消定义模块)。删除后来的urlArgs
可以避免出现意外情况。