2012-03-06 94 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加載然後在成功事件。

,那麼你可以肯定的是事件未綁定多次和看法僅僅是一個視圖

相關問題