javascript - 为 MVC3 View 格式化 JavaScript

标签 javascript asp.net-mvc-3 coding-style

我现在已经尝试了很多不同的方法来组织特定于每个 View 的 JavaScript,但我还没有找到任何让我觉得舒服的方法。反正看起来很乱。可能(并希望)这是因为我使用 JavaScript 的时间不长,而且有一种很好的方法可以做到这一点。

目前我正在做的是:

在我的布局文件中,除了 RenderBody 之外,我还有一个用于脚本的 RenderSection。此部分包含与每个单独 View 相关的所有 JavaScript。全局脚本隐藏在它自己的文件中。

在这个部分中有很多不同的 JavaScript 部分(对于我最大的 View ,目前大约有 600 行 JavaScript):

  • 变量的一些定义和设置不同的设置(jQuery 设置等)。
  • 在屏幕上隐藏不同的 DOM 元素,这些元素将在用户稍后与 View 交互时显示。
  • 许多用于链接到 DOM 元素的不同事件的 jQuery 代码 (click/keyup++)
  • 一些代码重构为方法,因为它们被不同的 jQuery 事件使用。

这里我不喜欢的地方主要有两点:

  • 所有这些代码都放在一个大代码块中,很难找到我要查找的脚本部分。基本上,随着脚本的增长,它变得非常难以维护。
  • 脚本与 View 位于同一文件中。我想将脚本放入一个单独的文件中,但我不能,因为我使用了模型的不同部分,以及脚本中的一些 HtmlHelpers。例如,在我执行一些 $.post 调用的地方,我使用 @Url.Action('...') 将其链接到正确的操作方法,以确保我的脚本将继续工作即使我改变了我的路线。 我还使用模型来决定某些元素是否应该像这样开始隐藏(这是让它开始隐藏的好方法,还是有更好的方法?即使我不能把它看起来有点老套我的手指在上面):

代码

@if( Model.SomeBoolValue ){
  @:$("#DOMelementID").hide();
}

非常感谢一些让我朝着正确方向前进的指示。在我失去对自己代码的控制之前,我需要更好地构建它。

最佳答案

我建议您看看 jQuery plugin authoring并根据您将附加到 DOM 元素的插件来组织您的 JavaScript 代码。

@Url.Action('...') 问题而言,有许多方法可以解决此问题并将您的脚本外部化到单独的文件中。例如,假设您正在对现有表单或已包含 url 的 ActionLink 进行 AJAX 化:

$('#myAnchor').click(function() {
    // use this.href to fetch the url
    $.post(this.href, function(result) {

    });
    return false;
});

现在,如果您只是想在用户点击一个 div 时发送一个 AJAX 请求,您总是可以使用 HTML5 data-* 属性(与 ASP.NET MVC 3 unobtrusive AJAX 和验证的工作方式相同)来定义它DOM 元素上的 url:

<div id="mydiv" data-url="@Url.Action("Some Action")">click me</div>

现在在一个单独的文件中

$('#mydiv').click(function() {
    var url = $(this).data('url');
    $.post(url, function(result) {

    });
});

如果您遵循我关于编写 jQuery 插件的第一个建议,您的代码将如下所示:

$('#mydiv').myplugin();

现在让我们考虑以下片段:

@if(Model.SomeBoolValue) {
    @:$("#DOMelementID").hide();
}

因此,从此处看来,您正在使用 View 模型属性来显示/隐藏代码部分。好的,这就是我可能会建议你的:JSON 将这个模型序列化到 View 中,然后你可以开始将值从它传递到你新开发的 jQuery 插件:

<script type="text/javascript">
     var model = @Html.Raw(Json.Serialize(Model));
     // now configure configure your plugins, for example
     $('#mysection').myplugin({ model: model });
</script>

现在在您的插件中,您可以访问 View 模型的所有属性。

这就是您需要放入 View 中的全部内容。所有其他 javascript 当然会在单独的 javascript 文件中,并在可重用的 jQuery 插件中适本地组织。

关于javascript - 为 MVC3 View 格式化 JavaScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7304200/

相关文章:

javascript - Contenteditable--编辑时改变背景颜色

javascript - 如何在 javascript 中实现有偏差的平均年龄?

Javascript,使用变量创建对象的最佳方法

javascript - Node.js 错误抛出被称为不好的做法,但对于 TDD 来说是必不可少的

java - Eclipse 标签的用途是什么——比如@author、@version、@link?

javascript - 我如何检测字符串中是否有大写字符

c# - 由于 System.AccessViolationException,NUnit 测试失败

c# - 仅通过 Ninject 将存储库绑定(bind)到基类?

c# - 多个开发人员使用具有不同设置的单个 web.config

c# - 使用面向服务的体系结构支持富对象传输的设计模式?