我想知道的是我是否从正确的角度接近这个问题。
我有一个我正在构建的 asp.net 应用程序。我正在使用 Masterpage 来查看应用程序的整体外观(您可以在下面看到代码)。
我想让菜单系统使用像 jQuery 的.load()
函数这样的动态加载来加载内容。那很好,我把它记下来了。该.load()
函数用于innerHTML
将该内容泵入页面。如果您想在该页面上加载特定于模块的脚本和样式,这是一个问题。
我的问题是,在这样的环境中,你们如何为这些模块加载脚本?我应该在应用程序的初始加载时加载每个脚本吗?这个应用程序永远不会“那么大”,但我想确保我做对了,以防万一。
主表
<div id="primaryNavigation">
<ul>
<li class="current"><a href="../Default.aspx">Main</a></li>
<li><a href="../Modules/Page1.aspx">Some Overview</a></li>
<li><a href="../Modules/Page2.aspx">Reporting</a></li>
<li><a href="../Modules/Page3.aspx">More Reporting</a></li>
<li><a href="../Modules/Page4.aspx">About</a></li>
</ul>
</div>
<div id="mainContentContainer">
<asp:ContentPlaceHolder ID="cphBody" runat="server" />
</div>
内容标签内的示例模块
<div id="container">
Inside a page
<script id="scriptToLoad" type="text/javascript">
alert('Something');
head.ready(function () { console.log('please print'); });
</script>
</div>
<div id="includeScripts">
../Files/Javascript/SomeModuleSpecificJs.js
../Files/Javascript/SomeModuleSpecificJs1.js
</div>
我的想法是在每个模块中设置一个div
ID 为“includeScripts”的模块,并从母版表中的方法加载这些模块,就像这样。这种方法有效(显然需要一些调整)但是如果用户继续点击模块,最终每个文件都会被加载。如果是这样的话,我不妨将它们全部加载到母版表上。
加载 MasterPage 时要运行的 JS
$navigation = $("#primaryNavigation").delegate('ul li a', 'click', function () {
$('#primaryNavigation').find('li').removeClass('current');
$(this).parent().addClass('current');
$('#mainContentContainer').load($(this).attr('href') + ' #container');
// Obviously this would overwrite the content from the container, this is merely proof of concept
$('#mainContentContainer').load($(this).attr('href') + ' #includeScripts');
var jsArray = $('#includeScripts').text().trim().split("\n");
$.each(jsArray, function (index, value) {
$.getScript(value);
});
return false;
});