2009-10-06 51 views
0

我正在構建一個非常互動的網站與大量的ajax類型的功能。動態jQuery的asp.net mvc凌亂的代碼,如何重構更乾淨

我開始用相當數量的消息Jquery代碼,所有代碼都與我的蜜蜂蜇標籤一起嵌套。

例如

<% foreach (var group in Model.GroupBy(item => item.goalId)) 
{ %> 
//$('#AddNew2<%= Html.Encode(group.Key) %>').html('<input type="text" name="" value=""/>'); 
$('#AddNew2<%= Html.Encode(group.Key) %>').one('click', function(event) { 
    $('#AddNew2<%= Html.Encode(group.Key) %>').html('<input id="AddNew2<%= Html.Encode(group.Key) %>" type="text" name="" value=""/>').focus(); 

     $('#AddNew2<%= Html.Encode(group.Key) %>').bind('keypress', function(e) { 
     var code = (e.keyCode ? e.keyCode : e.which); 
     if(code == 13) { //Enter keycode 
     //Do something 
     alert("hello"); 
     } 
     //This will display the keycode 
     //alert(code); 
     //    
     }); 
}); 

我的問題是雙重的

  1. 而不是讓所有的代碼視圖中,或主網站模板,我可以重構這個別的地方,也許使用.ascx控件?或者我可以只導入一個.js文件,並且仍然有<%%>標籤在裏面工作?

  2. 我使用jQuery的方式很糟糕嗎?感覺我對選擇器的使用過於簡單,因爲我覺得選擇我需要的元素會有更清晰的方式。

請記住,我將有一個都可以被添加到/更新在同一頁上,有可能多達數百個不同的元素和id的數據的許多不同的名單裸露。

回答

2

首先,你可以(也可以說應該)使用一個JavaScript變量來保存該值並簡單地重新使用它。這將改善您的代碼的可讀性。其次,我不確定你想要做什麼 - 看起來你正在爲每個元素設置一個點擊處理程序。我建議你給他們所有的課程,然後使用該課程作爲應用元素的選擇器。第三,看起來您正在創建一個與現有元素具有相同標識的新元素。那將是一個禁忌。你應該給它一個新的ID和/或名稱。如果你使用一個類,你可能不需要外部元素上的id。

Ex。

佈局:

<% foreach (var group in Model.GroupBy(item => item.goalId)) { %> 
    <p> 
    <input type="button" value="Add" class="add-goal" /> 
    <input type="hidden" value='<%= group.Key %>' /> 
    </p> 
<% } %> 

腳本

$('.add-goal').one('click', function() { 
    var goalid = $(this).next('input[type=hidden]').attr('value'); 
    var parent = $(this).parent().html(''); 
    $('<input type="text" id="AddNew2' + goalid 
      + '" name="AddNew2' + goalid + '" value="" />') 
     .appendTo(parent) 
     .keypress(function(e) { 
      ... 
     }); 

});