我们有一个选项卡式界面,其中一个选项卡内是一个隐私表单。这种隐私表单,以及在其大部分工作中使用外部 JavaScript 文件,还使用内联 JavaScript,因为它目前依赖于动态代码(在服务器端语言中)。
formTabs 包装器(没有回调函数的 ajax 选项卡)
...
<script type ="text/javascript">
var messagingTabset = ProjectName.Tabset.init({
'tabID': 'preferences-tabset',
'ajaxUrl0': '<%=Url.Action("PreferencesMainForm", "Profile")%>',
'ajaxUrl1': '<%=Url.Action("ProfileImageForm", "Profile")%>',
'ajaxUrl2': '<%=Url.Action("InterestsForm", "Profile")%>',
'ajaxUrl3': '<%=Url.Action("PrivacyForm", "Profile")%>',
'ajaxUrl4': '<%=Url.Action("PasswordForm", "Profile")%>',
'ajaxUrl5': '<%=Url.Action("CustomUrlForm", "Profile", new {userId = Model.UserId})%>',
'defaultAjaxUrl': '<%=Url.Action(Model.PartialName, "Profile")%>'
});
</script>
...
privacyForm 视图(更多带有服务器端代码的内联 javascript)
...
<script type = "text/javascript">
var preferencesPrivacyForm = new ProjectName.AJAX.Form({
"ajaxFormID": "preferences-privacy-form",
"actionUrl": '<%= Url.Action("SavePrivacy","Profile") %>',
"dataReturnType":"json"
});
</script>
...
后端开发人员:“此表单的配置 JavaScript 代码应保留在 privacyForm 视图中”
前端开发人员:“嗯,我确定我已经读过这不是执行此操作的方法 - 不可靠,所有 JavaScript 都应该在包含选项卡包装器的 HTML 页面内,在该选项卡加载的回调函数内. 你真的应该 a) 为我提供逻辑,让我在 tabs-wrapper 中获取动态数据,或者 b) 让我通过 DOM 遍历获取这些动态变量”
后端开发人员:“这两种方法都需要做大量工作却没有真正的回报!第一个例子很糟糕,因为这意味着我将不得不改变它的构建方式(并且工作正常)。这可能会意味着重复。第二个例子是狡猾的,因为标记可能会改变,所以处理代码的人可能会忘记编辑选项卡包装器中的 DOM 遍历方法。这是我们不需要的另一个抽象级别。如果你提供我有一些证据说明为什么这真的很糟糕,然后我会检查一下,但否则我无法证明投入时间是合理的”
前端开发人员:'好吧,我已经浪费了几天时间,通过将 AJAX 加载的 JavaScript 放在其包装器的回调中来解决问题,但是现在你想一想,关于这类事情的一个很好的参考真的是很好,因为您是对的,目前,该应用程序正在运行,没有任何问题。
这是整个大型应用程序中使用 Ajax 加载内联 JavaScript 的众多示例之一。
我应该说服后端开发人员我们应该使用回调,还是我错过了什么?