2012-05-11 15 views
1

我目前正在建設一個腳本,將通知他們從導航的頁面(這是一個ASP.NET MVC應用程序的BTW)走之前的形式已經改變了用戶。Jquery的形式:使用Memento模式建立一個髒形式通知系統 - exisitng模式?

我首先開始構建一個簡單的腳本,檢測用戶是否更改任何輸入,然後翻轉一下以指定表單爲「髒」。

這結束了過於簡單,缺乏延長表單輸入的支持,所以我在明年受審的插頭。

最好的一個我能找到的是這樣的:http://mal.co.nz/code/jquery-dirty-forms/

這個jQuery髒形式插上的作品不錯,但還是缺少我需要的重要特徵之一;將先前的值與用戶輸入的內容進行比較的能力。例如,如果文本字段最初的值爲「Foo Bar」,並且用戶將該值更改爲「Foo」,則表單現在變髒。

當用戶將該文本框的值更改回「Foo Bar」,然後使用該插件時,表單仍然「髒」,這對我的要求不正確。

則存在無插件做什麼,我需要做的,所以我將不得不建立自己的,這使我對我的問題:什麼是構建這種功能的最佳做法?

我的想法是這樣的:

  • 由於這個程序是MVC我可以使用以下技術:
    • jQuery的
    • JSON
    • 數據註解

我最初的想法是:

  • 該頁面可以有多種形式;每個表單都會有一個最初設置爲false的屬性「isDirty」。
  • 我將需要存儲的原始值的每個字段進行比較(紀念品)
  • 每場能有一個類/標記/屬性「isDirty」,這將調出那場「高亮等」
  • 我可以將這些字段值存儲在JSON NVP數據結構中
  • On提交JavaScript將遍歷該JSON字符串,並查看orignal值,與當前值進行比較,如果該值無效,則會添加「髒」標誌(追加類名稱)到違反髒規則的文本字段。

性能和可重用性是確定的考慮因素。我應該能夠將此模式應用於任何形式,並且只需很少的工作就可以使其消耗原始值並執行驗證。

有沒有人見過的現有模式類似於我的需要?我的想法聽起來可行嗎?有沒有人有更好的路線我可以採取的投入?讓我開始了一個代碼示例我可以擴展將是非常美妙的,僞代碼將是一件好事也。

[更新]

最近有人告訴我什麼,我試圖做的是通常被稱爲「形式藏匿」,但谷歌不會與搜索詞多大幫助。

這個劇本,我一直努力着類似於什麼我想做的事: (此頁:http://www.mydogboris.com/2009/10/using-jquery-data-feature-to-detect-form-changes/

var formChanged = false; 

$(document).ready(function() { 
$('#my_form input[type=text].editable, #my_form textarea.editable').each(function (i)  { 
     $(this).data('initial_value', $(this).val()); 
}); 

$('#my_form input[type=text].editable, #my_form textarea.editable').keyup(function() { 
     if ($(this).val() != $(this).data('initial_value')) { 
      handleFormChanged(); 
     } 
}); 

$('#my_form .editable').bind('change paste', function() { 
     handleFormChanged(); 
}); 

$('.navigation_link').bind("click", function() { 
     return confirmNavigation(); 
}); 
}); 

function handleFormChanged() { 
$('#save_or_update').attr("disabled", false); 
formChanged = true; 
} 

function confirmNavigation() { 
    if (formChanged) { 
     return confirm('Are you sure? Your changes will be lost!'); 
    } else { 
     return true; 
    } 
    } 

回答

0

Dirty Forms version 2.0.0現在跟蹤第一次調用$('#theform').dirtyForms()時的字段狀態。如果字段與原始狀態不匹配,則認爲這些字段很髒,如果它們匹配,則將字段清除

這是真實的,直到您致電$('#theform').dirtyForms('setClean'),然後拍攝當前狀態的新快照並且任何與此新狀態的偏差都將被視爲髒。