2

我很难ScriptBundle正常工作(如果这应该工作的话)。我想要做的是添加另一个包(jQuery)作为我的包的依赖项,如下所示:

bundles.Add(new ScriptBundle("~/js/myscripts")
                    .Include("~/js/jquery",
                             "~/Content/scripts/myscript.js"));

~/js/jquery是 jQuery 包的“名称”(虚拟路径),如此注册(在我的依赖包之前):

bundles.Add(new ScriptBundle("~/js/jquery")
                    .Include("~/Content/scripts/jquery-{version}.js"));

当我@Scripts.Render("~/js/myscripts")在我看来,只myscript.js呈现给 HTML。如果我将 jQuery 的虚拟路径从捆绑名称中的路径更改为物理的现有路径,它可以工作:

bundles.Add(new ScriptBundle("~/js/myscripts")
                    .Include("~/Content/scripts/jquery-{version}.js",
                             "~/Content/scripts/myscript.js"));

此外,@Scripts.Render("~/js/jquery")在视图中进行操作也很有效。它只是引用另一个ScriptBundle不起作用的不存在的虚拟路径(名称)。这应该工作吗?如果没有,我想知道我可以在哪里发布错误报告,说如果不支持这种情况应该抛出异常。如果支持,它在哪里说,为什么它不起作用?

4

3 回答 3

1

根据您的依赖关系,您必须在布局(视图)中添加什么

@Scripts.Render("~/js/jquery")
@Scripts.Render("~/js/myscripts")

评论后更新:

您不能嵌套捆绑包,即您不能在捆绑包中包含捆绑包,在创建父捆绑包时该虚拟路径很可能不可用。

通常我有一个单独的 jquery 包(包括其他一些不经常更改的 js),然后是另一个 js 包用于其他所有内容。适用于浏览器缓存。

附带说明一下,您是否看过 requireJS,如果您要捆绑所有内容,这并不是真正需要的,但它确实使您的 js 文件更好地记录在案,因为它使依赖项显式

于 2012-10-26T08:49:28.717 回答
1

它不受支持,但您可以提出自己的解决方案,对吧?就像是:

var jquery = new[] { "~/Content/scripts/jquery-{version}.js" };
var myScripts = jquery.Concat(new[] { "~/Content/scripts/myscript.js" }).ToArray();
var myOtherScripts = myScripts.Concat(new[] { "~/Content/scripts/otherscript.js").ToArray();

bundles.Add(new ScriptBundle("~/js/jquery").Include(jquery));
bundles.Add(new ScriptBundle("~/js/myscripts").Include(myScripts));
bundles.Add(new ScriptBundle("~/js/other").Include(myOtherScripts));
于 2013-11-22T18:53:33.790 回答
0

似乎这是一个不受支持的功能,所以我已经报告了一个问题

于 2012-10-26T12:05:37.413 回答