タブ付きのインターフェースがあり、これらのタブの1つの中にプライバシーフォームがあります。このプライバシーフォームは、その作業の大部分に外部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)タブ内の動的データを取得するためのロジックを提供する必要があります-ラッパーまたはb)DOMトラバーサルを介してそれらの動的変数を取得させてください」
バックエンド開発者:「これらの方法はどちらも、実際の見返りがないために多くの作業が必要です。最初の例は、構築方法を変更する必要があることを意味するため、悪いです(そして正常に機能します)。 2番目の例は、マークアップが変更される可能性があるため危険です。そのため、コードで作業している人がタブラッパーのDOMトラバーサルメソッドを編集するのを忘れる可能性があります。これは、私たちが必要としない別のレベルの抽象化です。なぜこれが本当に本当に悪いのかについてのいくつかの証拠がありますが、それ以外の場合は時間をかけることを正当化することはできません。」
フロントエンド開発者:'ええと、私はすでに数日を無駄にして、ラッパーのコールバックにAJAXがロードされたJavaScriptを配置することで問題を修正しましたが、そうです、今あなたはそれについて考えます、この種のものに関する良いリファレンスは本当にいいですね、あなたが正しいので、現時点では、アプリケーションは問題なく実行されています。
これは、Ajaxを使用してインラインJavaScriptをロードしている大規模なアプリケーション全体の多くの例の1つです。
バックエンド開発者にコールバックを使用する必要があることを納得させる必要がありますか、それとも何かが足りませんか?