0

我在 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%功能的页面怎么办。

4

3 回答 3

1

拥有一个大的 javascript 文件不是问题,事实上它是需要的。通过将大部分 javascript 放在一个文件中,浏览器可以缓存此文件,并且在随后的页面加载中不需要从服务器获取 javascript,从而加快页面加载速度。您可能仍想拆分您的 javascript 文件,但出于维护原因。例如,为所有与客户相关的页面等创建一个 customer.js 文件可能是有意义的。

要在文档就绪事件中设置各个事件处理程序,您可以在页面加载中包含内联 javascript,这将允许您在服务器生成时设置实际的控件 ID(例如,使用 <% Combo.ClientID %>)。此代码可能只是调用主 js 文件中的相应函数。

于 2012-06-15T02:19:28.077 回答
1

当 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

于 2012-06-15T06:17:30.227 回答
0

如果您的应用程序很大,按功能区域组织它可能会有意义,但如果您发现有很多小 js 文件,我建议您将它们放在一起。话虽如此,有一些很棒的工具可以最小化不同的 javascript 文件并将其组合在一起(实时或作为构建过程的一部分),甚至可以监控更改。他们甚至都可以将 .less/coffeescript 等翻译成 css。

看看 squishit 和 chirpy。我认为两者都可以在 Nuget 上找到。

Squishit: http: //www.codethinked.com/squishit-the-friendly-aspnet-javascript-and-css-squisher

叽叽喳喳: http ://chirpy.codeplex.com/

一般的智慧是,如果您有一个在第一个页面视图上加载的 js 文件,它将被缓存以供后续页面视图使用。这通常是您可能希望为所有文件提供一个文件的原因(尽管您可以在开发时将它们分开)。

于 2012-06-15T02:38:16.167 回答