knockout.js外部模型js文件

时间:2014-09-09 08:14:11

标签: javascript asp.net-mvc caching knockout.js bundling-and-minification

我有一个MVC.NET应用程序,它使用Knockout.js(+ knockout.mapping)来处理一些级联下拉菜单。这些数据来自对外部服务的WebAPI调用。碰巧这个服务需要一个2小时后到期的身份验证令牌,所以我让MVC应用程序将来自服务的数据放在System.Web.Caching.Cache中并从那里返回它,除非令牌已经过期它将抓住它它再次来自服务。 这工作正常。 但是,当我需要将其转换为View时,我目前正在使用以下方法,即具有ViewModel的属性,我将该服务/缓存数据分配给,然后在视图中执行此操作:

var model = new ViewModel(@Html.Raw(Json.Encode(Model.ReferenceData)))
ko.applyBindings(model); 

其中Model.ReferenceData是来自服务的数据。 再次,这工作正常,但......事情就是这样,页面然后在每个请求上都将所有Json数据转储到其中。 我想为ReferenceData使用外部JS文件,因为至少它可以被浏览器缓存并减少未来请求中页面的重量。 但是,我认为生成JS文件的开销并不小,而且 - 我真正需要的是生成一个指向该文件的链接,其变化方式与内置MVC捆绑的js文件的工作方式大致相同 - 生成带有查询字符串的链接。 我的问题是:有一种简单的方法吗? 当我第一次填充缓存时,我确实可以生成一个js文件并从View中引用它,但正如我所说的那样,每次刷新时都要更改它的链接 - 或者至少确定数据是否在它已经改变并且只有那时才更新它。问题所在。

对此的任何见解都会有很大的帮助

由于

纳特

1 个答案:

答案 0 :(得分:0)

  1. 版本JS文件(您可以在文件中保留GUID)。
  2. 在Application_Start()中将此版本ID获取为静态变量。
  3. 在您的控制器中将此静态变量数据传递给ViewBag。
  4. 使用此ID
  5. 参考您的脚本

    重新生成文件时,请更新文件中的版本以及静态变量。来自客户端的下一个请求使用新密钥获取新版本。

    现在,如果要更新新版本的客户端,则必须使用双向协议,如Web套接字或长轮询。