4

我通過在服務器端使用自定義ValidationAttributes來擴展MVC 3驗證,並且已經實現了IClientValidatable來爲我的自定義驗證輸出html5數據屬性。然後我使用jQuery.validator.addMethod添加我的客戶端驗證。我最後的任務是編寫將html5數據屬性轉換爲jQuery驗證器可以理解的格式的適配器。我的驗證需要多個值,所以我需要使用jQuery.validator.unobtrusive.adapters.add,而不是像addSingleVal這樣更直接的函數之一。setValidationValues jquery.validate.unobtrusive不可用外部文件?

在我的適配器中,使用jquery.validate.unobtrusive文件中的幾個函數(如setValidationValues和getModelPrefix)會很有用,但如果我沒有弄錯,這些函數在閉包內部使它們僅在關閉。我真的不想把我的自定義函數放在一個可能會改變的微軟腳本文件中,所以除非任何人有任何想法,否則我不得不在我自己的文件中複製這些函數,這顯然是不理想的。

所以有什麼想法和其他人做什麼?

回答

2

恐怕不是。
正如你所知道這些功能是實現這樣的:

(function ($) { 
    ... 
    function setValidationValues(options, ruleName, value){ 
     //the implementation 
    } 
    ... 
}(jQuery)) 

只要私人範圍內,這個函數不能從出側訪問它,一種是私有函數的一類。定義這些功能的目的是你不能在範圍之外訪問它們。
minifier methods也知道這FACT並儘可能使用它來壓縮js。如果你看看縮小版本jquery.validate.unobtrusive.min.js它證明自己不再有setValidationValues函數,但(某些字母)x函數。

只要它們太短而不關心它們的大小,對這些功能進行復制和粘貼並不是什麼大事。使用縮小器,您可以獲得此功能和其他3個其他功能,僅需200 bytes。而這200個字節只能使用一次。


然而,有一種方法,如果你使用縮小的版本,你可以查找的功能名稱,並把它放在你的 adapter.add(function(){//use their name here}),你會發現複製和粘貼比較好。