2010-08-13 57 views
1

我正在編寫一個包含大量可重用組件的應用程序(Asp.Net MVC)。組織從Ajax調用返回的JavaScript的最佳實踐

我目前正在使用jQuery庫加載Ajax調用這些組件。

這些組件也會調用其他子組件,所以這些JavaScript都會返回。

所以問題是,其中我應該把「回調」的JavaScript?

我現在有這樣的事情:

頁:

<html> 
<head> 
    <title>blah</title> 
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" ></script> 
</head> 
<body> 

<div id="Container"></div> 

<script type="text/javascript"> 
    $(document).ready(function() { 
     $('#Container').load('SomeCrazyDomain.com/SomeComponent'); 
    }); 
</script> 
</body> 
</html> 

組件:

<p>Load sub components</p><input type="button" onclick="GetSubcompent" /> 
<div id="SubcompentContainer"></div> 

<!-- Is this Bad? --> 
<script type="text/javascript"> 
    function GetSubcompent() { 
     $('#SubcompentContainer').load('SomeCrazyDomain.com/SomeSubComponent'); 
    } 
</script> 

次要成分:

<h1>I am a sub compent</h1> 
<script type="text/javascript"> 
    function ToBeLoadedForEachAjaxCall() { 
     //do something 
    } 
</script> 

如果我放開它,那麼爲每個ajax調用加載ToBeLoadedForEachAjaxCall()會有什麼效果?這些交叉會殺死最後一個ToBeLoadedForEachAjaxCall()並用「較新」的替換掉嗎?

謝謝

回答

1

將內聯javascript放入您的標記通常是一個壞主意。使維護和調試非常麻煩。您應該創建一個包含所有JavaScript代碼的通用js文件,並將其包含在您的<HEAD></BODY>之前。例如,有一個包含以下內容的js文件:

$('#SubcompentContainer').load('SomeCrazyDomain.com/SomeSubComponent'); 
function ToBeLoadedForEachAjaxCall() { 
    //do something 
} 

最終,你可能會意識到,一些這段代碼是非常具體的網站的各個部分。您可能不想在每個頁面上加載SomeCrazyDomain.com/SomeSubComponent。此時,您可以選擇創建特定於網站不同部分的js文件。

回答你的第二個問題。如果有多個具有相同名稱的JavaScript函數,則定義的最後一個將是一次運行。