我玩 MVC 已经有一段时间了,但是自从我参与的项目开始风起云涌以来,越来越多的人加入其中。由于我负责四处寻找一些“最佳实践”,因此我特别警惕可能滥用 javascript 并想找出让我们的观点和部分观点很好地发挥作用的最佳方式用javascript。
目前,我们的代码看起来像这样(只是为了举例而简化)
<script type="text/javascript">
function DisableInputsForSubmit() {
if ($('#IsDisabled').is(':checked')) {
$('#Parameters :input').attr('disabled', true);
} else {
$('#Parameters :input').removeAttr('disabled');
}
}
</script>
<%=Html.SubmitButton("submit", Html.ResourceText("submit"), New With {.class = "button", .onclick = "DisableInputsForSubmit(); if ($('#EditParameters').validate().form()) {SetContentArea(GetHtmlDisplay('SaveParameters', 'Area', 'Controller'), $('#Parameters').serialize());} return false;"})%><%=Html.ResourceIcon("Save")%>
在这里,我们正在保存一个表单并将其发布到服务器,但是我们禁用了我们不想验证的输入是否选中了复选框。
一点上下文
- 请忽略 Html.Resource* 位,它是资源管理助手
- SetContentArea 方法包装 ajax 调用,GetHtmlDisplay 解析有关区域、控制器和操作的 url
- 我们安装了combres,负责压缩、缩小和服务第三方库以及我明确标识为可重用javascript的内容
我的问题是,如果其他人DisableInputsForSubmit
在另一个级别定义了一个函数(比如说母版页,或者在另一个 javascript 文件中),可能会出现问题。
网络上的很多视频(Resig关于 jQuery 的设计,或Douglas Crockford在 Google 上关于 javascript 的优秀部分的演讲)都在谈论在你的库/框架中使用命名空间。到目前为止一切都很好,但在这种情况下,它看起来有点矫枉过正。推荐的方式是什么?我是不是该:
- 在命名空间内创建一个完整的框架,并在应用程序中全局引用它?看起来像这种方法这么小的东西需要做很多工作
- 创建一个骨架框架,并在我的视图/部分中使用本地 javascript,最终将部分内联 javascript 提升为框架状态,这取决于我们的使用情况?在这种情况下,我怎样才能将内联 javascript 与其他视图/部分完全隔离?
- 如果问题发生,请不要担心并依靠 UI 测试来发现问题?
事实上,我认为即使是我编写的位于单独文件中的 JS 代码也会从您的回答中受益:)