requirejs-在登录到应用程序时缓存html文件



我在durandal中使用requireJS进行SPA。我的方法是,在从我的应用程序注销时,我希望所有的html+js都被清除,例如:当与特定用户一起登录时,一些控件被禁用,而在与其他用户登录时,这些控件应该被启用。文件似乎已缓存。我希望用户在该应用程序中的页面之间移动时缓存它们,但在注销和再次登录时——从头开始。

感谢

这闻起来像是你走错了路。

显然,您在服务器端构建视图,在那里执行禁用/启用控件等逻辑。现在您确实遇到了问题,因为如果HTML被缓存,那么用于构建该HTML的逻辑也会被缓存。

你可以在注销时通过"清除缓存"来破解这个问题。但是,如果将来用户的权限可以在他仍然登录的情况下更改,该怎么办?你必须发明另一种破解方法才能让它发挥作用。最终,您将创建大量非常脆弱的意大利面条代码。

相反,如果要缓存视图,则视图不应包含任何逻辑。启用或禁用元素的逻辑,以及其他一切,都应该由您的JavaScript和从后端接收的数据决定。视图只是一个HTML模板,它使用JavaScript视图模型中的数据。

基本上,您需要在脑海中进行切换,并开始以预期的方式使用Durandal/Knockout:MVVM,HTML中的绑定,根据视图模型中的数据设置DOM的状态。当你在服务器上呈现HTML时,你现在正在做的是对HTML的状态进行"硬编码",你正试图破解这个解决方案的非动态性质。

如果你真的想继续你目前的编码:实现JS和HTML完全重置的简单方法是进行全页刷新,从而"离开你的SPA"。

使用urlArgs可以禁用缓存,将其添加到require.config:

urlArgs: "_disable_cache_=" +  (new Date()).getTime()

最新更新