2010-09-07 76 views
1

我看到了圍繞PartialViews和Javascript提出的許多問題:問題是需要Javascript的部分視圖,例如呈現一個jqGrid的一個觀點:自定義視圖引擎解決Javascript/PartialView問題?

局部視圖需要<div id="myGrid"></div> ,然後一些腳本:

<script> 
$(document).ready(function(){ 
    $('#myGrid').jqGrid({ // config params go here 
    }); 
} 
</script> 

的問題是如何將包括PartialView沒有與聯標籤和多個$亂扔垃圾的頁面(文檔).ready標籤。

我們還希望將多個RenderPartial調用的結果放入單個document.Ready()調用中。

最後我們討論了Javascript庫文件的問題,例如JQuery和JQGrid.js,它們應該理想地包含在頁面的底部(在$ .ready塊之前),理想情況下只包括適當的PartialViews在頁面上使用。

在瀏覽WWW時,似乎沒有人解決過這個問題。一種潛在的方式可能是實現一個自定義的View Engine。我想知道是否有人有我可能錯過的其他建議?

+1

您目前的實施遇到了什麼問題?將頁面底部的$(document).ready()函數中的調用「分組」到「.jqGrid()」時,您看到性能增益嗎? – jessegavin 2010-09-07 21:19:48

+0

直到您開始在頁面上進行數百次這些調用之後,纔會有明顯的性能提升。在你達到這一點之前,你會減少它到一個單一的jQuery調用,針對所有具有類選擇器和參數化函數的項目執行jiggery pokery。 – 2010-09-07 21:28:37

+0

「用行內標籤和多個」Jeesh「我不認爲你會通過關心這些東西讓你的客戶和用戶更開心。 – jfar 2010-09-08 00:15:22

回答

2

這是一個很好的問題,這是我的團隊在JQuery第一次發佈時所掙扎的東西。一位同事寫了一個頁面基類,將所有文檔準備好的調用合併成一個,但這完全浪費了時間和客戶的錢。

沒有必要將$(document).ready()調用合併爲一個,因爲它們都將按照它們出現在頁面上的順序依次調用。這是由於該方法具有多播代表性,並且不會對性能產生重大影響。你可能會發現你的頁面更容易維護,但可維護性很少是jQuery的問題,因爲它有這樣簡潔的語法。

你可以擴展想合併它們的原因嗎?我發現很多開發者都是完美主義者,他們希望他們的標記絕對完美。相反,我發現當客戶滿意時,當它充分發揮並顯示正確時,那麼我的時間在提供下一個要求上會更好。在過去的格式化HTML中,我浪費了很多時間,沒有人會看到。

任何想要顯示在頁面底部的腳本都應該放入ClientScriptManager.RegisterStartupScript方法中,因爲它在頁面底部呈現。

http://msdn.microsoft.com/en-us/library/z9h4dk8y.aspx

編輯只注意到你的問題是具體到ASP.NET MVC。我的答案更多的是ASP.NET的答案,但就呈現的html而言,我的大多數評論仍然相關。多個document.ready函數不是問題。

標準的jQuery方法是編寫一個腳本,將行爲添加到多個元素。因此,一類添加到您要包含一個網格,並呼籲每一個功能的div:

<script language="text/javascript"> 
    $(document).ready(function(){ 
     $('.myGridClass').each(function(){ 
       $(this).jqGrid({ 
        // config params can be determined from 
        //attributes added to the div element 
        var url = $(this).attr("data-url"); 

       }); 
      }); 
    } 
</script> 

你只需要在您的網頁上,並在你的部分看法一次添加這個腳本,你只需要:

<div class="myGridClass" data-url="http://whatever-url-to-be-used"></div> 

注意data-url屬性。這是HTML5語法,它將失敗HTML 4驗證。它仍然可以在HTML 4瀏覽器中使用。只有當你必須通過html驗證器運行你的頁面時,這一點很重要。我可以看到你already know about HTML5

+0

感謝您的回覆。我喜歡你對div的自定義屬性的想法。您的答案主要問題是PartialView不是獨立的。它會有一些標記,但標記取決於視圖外部的其他腳本。 – 2010-09-08 00:56:42

+0

確實如此,但是將文檔就緒函數合併爲一個函數的任何方法都需要外部依賴項來跟蹤和組合腳本。我的猜測是你的頁面上沒有很多網格,每個腳本都有足夠的腳本,但並不理想。如果你有一個包含許多控件的頁面,那麼對於單個腳本來說就會有一個很好的參數。與許多事情一樣,沒有簡單,容易的答案。標記的自我遏制和可讀性之間會有一個妥協。關於表現,你將不得不執行你自己的測試。 – 2010-09-08 08:13:10

0

不是很漂亮,但至於你的最後一點,你不能發送適當的標籤作爲一個ViewData字典在返回部分?