6

我已经下载了 MVC4 并试图弄清楚捆绑功能在标准项目中是如何工作的。似乎有捆绑:

<script src="@System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl("~/Scripts/js")"></script>

带回所有 jquery.js 文件,但不带回包含脚本中的 knockout.js 文件。为什么是这样?还有 _references.js 文件是关于什么的,为什么 knockout.js 文件被注释掉了?

4

3 回答 3

8

如果您查看您的项目Global.asax文件,您应该会发现如下内容:

protected void Application_Start()
{
    ...
    BundleTable.Bundles.RegisterTemplateBundles();
}

现在RegisterTemplateBundles只注册一个预定义的脚本子集:

  • jQuery-*
  • jquery.mobile*
  • jQuery-UI*
  • jquery.unobtrusive*
  • jquery.validate*
  • 微软Ajax.js
  • 微软Mvc.js
  • 现代化*
  • AjaxLogin.js

如果您想要一些其他文件,您可以更改RegisterTemplateBundlesEnableDefaultBundles

protected void Application_Start()
{
    ...
    BundleTable.Bundles.EnableDefaultBundles();
}

或者创建您自己的自定义捆绑包(您可以在此处阅读有关捆绑和缩小的更多信息)。您还应该知道这EnableDefaultBundles会对性能产生一些影响。

_references.js文件由 Visual Studio 用于 JavaScript 智能感知。您可以从以下文章中了解更多信息:

于 2012-05-14T11:29:11.740 回答
2

tpeczek 是正确的。大多数人不使用 Knockout.js,这就是默认情况下不包含它的原因。RC 的捆绑/缩小 (BM) 发生了很大变化,将文件添加到捆绑包将更加简单。请参阅我的捆绑和缩小教程

于 2012-05-15T05:00:22.170 回答
0

我能够使用在 RegisterTemplateBundles() 之后添加的以下代码行将文件添加到包中

BundleTable.Bundles.RegisterTemplateBundles();
BundleTable.Bundles.Where(x => x.Path == "~/Scripts/js").First().AddFile("~/scripts/knockout-2.0.0.js");
于 2012-05-22T19:29:00.420 回答