...
<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 view(更多内联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页面内,在该选项卡加载的回调函数内。你应该真正提供逻辑让我获取选项卡包装器内的动态数据或者让我通过DOM遍历获取那些动态变量。”
后端开发人员: "这两种方法都需要很多工作,但没有真正的回报!第一个例子很糟糕,因为这意味着我将不得不改变它的构建方式(并且已经很好地工作)。这可能意味着重复。第二个例子是靠不住的,因为标记可能会改变,所以正在处理代码的人可能会忘记编辑tabs-wrapper中的DOM遍历方法。这是我们不需要的另一个抽象级别。如果您能提供一些关于为什么这真的非常糟糕的证据,那么我会查看它,但是否则我无法证明花费时间的价值。
前端开发人员:“好吧,我已经浪费了几天的时间,通过将它们放在回调函数中修复了与AJAX加载的JavaScript相关的问题,但是是的,现在你想到了这一点,这种事情的好参考将非常好,因为你说得对,目前应用程序正在没有任何问题的情况下运行。”
这是一个大型应用程序中的许多示例之一,我们正在使用Ajax加载内联JavaScript。
我应该说服后端开发人员我们应该使用回调函数,还是我错过了什么?