2011-04-09 110 views
0

我想創建一些JavaScript驗證我的web應用程序,它都很好,除非我不希望我的腳本尋找的東西來驗證所有的時間。使用javascript命名空間與紅寶石和sinatra

假設我有兩件事要驗證,但它們不會在同一頁上出現。他們在'/page1''page2',我不希望我的page1的驗證器在page2上運行。

這應該可以通過對象文字的權利? 事情是這樣的:

var validations = 
{ 
    page1validation : 
    { 
     init : function() 
     { 
      // validation page 1 
     } 
    } 
    page2validation : 
    { 
     init : function() 
     { 
      // validation page 2 
     } 
    } 
} 

所以我需要調用這些驗證方法一樣validations.page1validation.init(),我想我可以在我有一個需要驗證表單中的每個HAML查看內置的JavaScript做到這一點。

%form{:action => ""} 
    %input{:type => "text"} 
    %input{:type => "submit", :value => "save"} 
:javascript 
    $(function() { 
    validations.page1validation.init(); 
    }); 

但是必須有一個更好的解決方案 - 我現在不能想到一個。那麼你將如何確保驗證器不會一直試圖驗證?

哦,如果我把的JavaScript在我的佈局文件底部的JavaScript將無法正常工作內聯...

回答

0

最簡單的方法做你想做的就是讓不同的形式,無論是用不同的id或class。

然後您的驗證可以使用該差異來獨立「定位」每個表單。這種方法不需要額外的「命名空間」。相反,你做這樣的事情。

$(function() { 
    page1validation(); 
    page2validation(); 
}); 

function page1validation() { 
    var form = getElementById('form1'); // form1 is the first form 
    if(!form) then return; 

    // .. perform validations in form 1 
} 
function page2validation() { 
    var form = getElementById('form2'); 
    if(!form) then return; 

    // .. perform validations in form 2 
} 

另外,我建議你在學習JS庫像jQuery投資一些時間。它提供了一些內置的方法,可以使代碼更小。