2012-03-06 92 views
7

我很新的MVC,我不能决定存储cshtml文件和它们各自的JavaScript代码的最佳方式。我的项目中的一些JS代码需要全局运行,但大部分代码完全依赖于特定视图或部分视图。MVC - 有没有一种很好的方法来捆绑各自的javascript控件?

如果我把JavaScript放在视图中,我会得到一堆内联无法缓存的javascript,如果我把它放在一个中心文件中,我会失去模块化。

我听说在MVC4中会有缩小功能,有没有什么我可以用MVC3做,这将允许我在Views中选择哪些javascripts包含然后将它们分组并自动缩小它们? (可能甚至在组?)

+1

兼得,这是一个在全局文件和代码重用代码,查看特定视图。 – 2012-03-06 20:33:17

+0

我的一个担心是有许多http调用许多不同的文件,所以如果我把控制特定的代码放在一个单独的文件中,我最终得到很多请求 – Madd0g 2012-03-06 20:39:34

回答

6

Cassette它和即将推出的MVC4捆绑包基本上是一样的。

在您的视图页面中,您可以使用Cassette的Bundles助手类来引用脚本和样式表。

@{ 
    Bundles.Reference("Scripts/jquery.js"); 
    Bundles.Reference("Scripts/page.js"); 
    Bundles.Reference("Styles/page.css"); 
} 
<!DOCTYPE html> 
    <html> 
... 

此外,盒具有用于LessCoffeScript的原生支持。如果您对客户端MVC框架(如Knockout.jsBackbone.js)感兴趣,它也支持HTML模板。

你仍然必须选择如何分组你的内容。正如official documentation所建议的,可能最好的选择是将绑定视为部署单位

请记住,捆绑包是一个 部署单位。如果包中的任何资产发生变化,则必须通过网页浏览器再次下载整个包。 因此,也许将共享代码组合到一个包中,并将页面脚本放入它们自己的包中
1

您可以将JavaScript放在单独的文件中,为每个视图。然后在_Layout.cshtml进入@RenderSection的头部:

<head> 
    <script src="@Url.Content("~/Scripts/jquery-1.7.1.js")" type="text/javascript"></script> 
    @RenderSection("head",false) 
</head> 

然后在每个视图中,可以把将要渲染到头部的一部分:

@section head{ 
    <script src="@Url.Content("~/ViewScripts/Order/New.js")" type="text/javascript"></script> 
} 
+0

是的,我知道关于部分,但如果两个部分需要相同的JavaScript?我不想多次调用同一个文件,我知道实际上浏览器不会调用它们两次,但它们仍然在html中 – Madd0g 2012-03-06 20:38:06

+0

我的解决方案只处理“特定视图”视图案例。我还没有需要部分特定的脚本(但),所以我没有想出一个解决方案。 – 2012-03-06 20:40:39

+0

nitpick,把JS部分放在关闭''标记之前,而不是''标记(防止阻止) – RPM1984 2012-03-06 22:15:49

0

@Ander如果你需要将脚本放在head标签中,这种方法是很好的。但是我发现大多数情况下它不是必需的,如果它是页面特定的JavaScript。您可以将脚本标记放在View中所需的任何位置,从而引用脚本文件。 Automatically bundling and minification will be supported in ASP.NET 4.5。在此之前,您可以将yuicompressor集成到Visual Studio中。

+0

我真的很惊讶,我以为我在问一个愚蠢的问题,并且人们会笑,并为我提供lmgtfy链接。我甚至没有深入到我的项目中,每当我需要编写页面特定的JavaScript时,它都会让我感到痛苦。 MVC的分层控制器/视图系统非常适合这样的事情。 – Madd0g 2012-03-06 21:18:47

+0

这取决于应用程序的类型。如果你将有一个丰富的UI,这很大程度上取决于AJAX,那么页面特定的JavaScript是必需的。在这种情况下,您可以使用像Knouckout.js或Backbone.js这样的框架将MVC或MVVM移动到页面中。 – 2012-03-07 13:06:07

0

这是不以使用谐音脚本(以我的观点)

最好的做法是建议你写的部分特定脚本分离js和绑定在页面加载或者部分事件通过AJAX加载然后在成功事件。

,那么你可以肯定的是事件未绑定多次和看法仅仅是一个视图

相关问题