我在Asp.net MVC中有一个Web项目,在许多页面中都有下拉列表控件。当这些下拉列表的值发生更改时,必须对控制器操作发出请求以刷新某些div标记。
为此,我使用jquery的$(document).ready()函数,我创建了一个这样的函数:
$("#ComboBox").change(function() { /* do something here */ });
$.get('@Url.Action("Action", "Controller")', function (result) {
// TODO: process the results of the server side call
});
问题是我不想创建一个大的javascript文件,其中包含当jquery的文档就绪事件发生时必须在所有页面中完成的所有事情的列表。
例如,在一个页面中,我有一个组合框,它创建一个对控制器x的动作x的请求,在另一个页面中另一个组合框,它创建一个对控制器y的动作y的请求。
我不确定这是否是为每个页面创建独特的javascripf文件的好策略。
我该怎么办?为每个特定文档就绪函数创建一个javascript?如果我将所有函数放在同一个javascript文件的同一文档就绪函数中,那么控件用jquery引用的id和类中的冲突命名怎么样?如果所有函数都在同一个javascript中,那么不使用文档就绪函数中90%函数的页面呢。
答案 0 :(得分:1)
拥有一个大的javascript文件不是问题,实际上是理想的。通过将大部分javascript放在一个文件中,浏览器可以缓存此文件,并且在后续页面加载时不需要从服务器获取javascript,从而加快页面加载速度。 您可能仍希望拆分javascript文件,但出于维护原因。例如为所有客户相关页面创建一个customer.js文件可能是有意义的。
要在文档就绪事件中设置各个事件处理程序,您可以在页面加载中包含内联javascript,这将允许您在服务器生成时设置实际控件ID(例如,使用<%Combo.ClientID%>)。此代码可能只调用主js文件中的相应函数。
答案 1 :(得分:0)
如果您的应用程序非常大,按功能区域组织可能会有意义,但如果您发现有很多小js文件,我建议您将它们放在一起。话虽这么说,有一些很棒的工具可以最小化和组合不同的javascript文件(实时或作为构建过程的一部分),甚至监视更改。他们甚至可以将.less / coffeescript等翻译成css。
看看squ and and and。我认为两者都可以在Nuget上找到。
Squishit:http://www.codethinked.com/squishit-the-friendly-aspnet-javascript-and-css-squisher
Chirpy:http://chirpy.codeplex.com/
一般的wizdom是,如果你有一个js文件加载到第一个页面视图,它将被缓存以用于后续页面视图。这通常是为什么你可能想要为所有这些文件提供一个文件的原因(尽管你可以在开发时将它们分开)。
答案 2 :(得分:0)
当javascript在客户端变得越来越大时,你应该考虑维护。 jQuery非常容易使用,但问题突然之间你会发现许多地方的回调/处理程序很难管理。我建议你在客户端使用某种类型的MVC库,比如 Backbone.js ,这有助于以更好的方式组织代码。
第二个这个作为开发视角我们应该将应用程序中使用的完整javascript分离到单独的文件模块/控制器中。您可以使用缩小框架来帮助将所有javascript组合到单个文件中。
ASP.NET MVC 4本身支持绑定/缩小,可帮助您组合和缩小一组js或css文件。
http://ofps.oreilly.com/titles/9781449320317/ch_ClientOptimization.html#BundlingAndMinification http://weblogs.asp.net/scottgu/archive/2011/11/27/new-bundling-and-minification-support-asp-net-4-5-series.aspx