JavaScript在大多數Web解決方案中扮演着越來越重要的角色,但我發現將JS代碼從視圖細節中分離出來要比在服務器端代碼中分離要困難得多。尋求關於如何從視圖中分離JS代碼的建議
人們使用什麼技術來分離JS代碼,以減少維護負擔並使其儘可能適應小的視圖更改?
爲了提供一個具體的例子,我有一個看起來有點像下面這樣的觀點:
<div id="signin" class="auth">
<h2>Sign in</h2>
<div id="resultbox" class="box" style="display: none;"></div>
<div class="form">
<p>Required fields are marked <span class="yellow">*</span></p>
<form action="@Url.Action(MVC.Account.Authenticate())" method="post" id="authform">
<label for="Identification">Alias or email <span class="yellow">*</span></label></p>
@Html.TextBoxFor(m => m.Identification, new { size="22", tabindex="1" })
<label for="Password">Password <span class="yellow">*</span></label></p>
@Html.PasswordFor(m => m.Password, new { size="22", tabindex="2" })
<a href="#" class="but_styled" id="btn_signin" tabindex="3">Sign in</a>
</form>
</div>
</div>
JS部分被分成兩個文件 - 第一個是我的「商業邏輯」級和第二主要用於配線:
(function (pp, $, undefined) {
pp.account = {};
function hideResultBox() {
var box = $('#resultbox');
box.hide();
box.removeClass('info_box').removeClass('error_box');
}
function showResultBox(result) {
var box = $('#resultbox');
if (result.Success === true) {
$('#resultbox_content').html(result.Message);
box.addClass('info_box').show();
} else {
$('#resultbox_content').html(result.Message);
box.addClass('error_box').show();
var messages = '';
for (var error in result.Errors) {
messages += '<li>' + result.Errors[error] + '</li>';
}
if (messages !== '')
$('#resultbox_content').append('<br /><ul>' + messages + '</ul>');
}
}
pp.account.authenticate = function (data) {
hideResultBox();
$.post('/account/authenticate', data, function (result) {
showResultBox(result);
if (result.Success === true) {
setTimeout(function() { window.location = result.Url; }, 1000);
}
});
};
})(window.pressplay = window.pressplay || {}, jQuery);
和配線部分:
$(document).ready(function() {
$('#signin a').live('click', function() {
var form = $(this).closest('form').serialize();
pressplay.account.authenticate(form);
return false;
});
});
的問題上面的代碼是如何緊密地與視圖的外觀(必須呈現的元素ID,結構等)緊密聯繫在一起,但我對如何改進它沒有好的想法。
在我看來,如果我繼續沿着這條道路走下去,那麼JS文件最終會變成一個正確封裝的邏輯,並結合各種視圖特定的東西。
這是我希望做的最好的或者是否有我可以應用的技術來避免這些混亂?
我自己關於如何改進這個問題的想法圍繞着構建某種服務器端生成的「元素選擇器」JS類,這樣我就可以編寫JS,而不必使用類和引用元素ID的很多字符串引用。但我不確定人們會怎麼做,或者最終是否會變得更糟。
你能否提供最後兩個項目符號的示例(或者鏈接到某個項目)?我不完全確定如何將這些建議轉化爲我可以應用的有形內容。 –
第三個項目符號是關於名爲'Publisher/Subscriber'的設計模式:http://en.wikipedia.org/wiki/Publish/subscribe –
+1,也是因爲您提到了數據屬性的使用!記得很清楚。 =) –