2014-03-18 103 views
2

我嘗試爲我的流星應用程序定義驗證功能。我必須驗證客戶端的後數據,但也需要服務器端來防止操作。因爲這個客戶端的meteorjs全球功能

我在目錄中定義的功能對myApp/lib目錄/確認/

我將我的表格上提交事件和調用meteorjs梅索德。在這種方法中,我調用了我的驗證函數。在對myApp

驗證功能/ lib目錄/確認/:

function Validation (post) { 
    this.validate = function() { 
     console.log(post) 
     return true; 
    }; 
}; 

在對myApp /客戶機/經理提交事件/:

Template.UserRegisterForm.events({ 
    'submit form' : function(e) { 
     e.preventDefault(); 
     var post = {test : 'success'}; 
     Meteor.call('userRegisterFormPost', post, function(error, postdata) { 
     }); 
    } 
}); 

了Methode在對myApp/lib目錄/ methodes /:

Meteor.methods({ 
    userRegisterFormPost : function(attr) { 
    var validate = new Validation(attr);  

    } 
}); 

這樣做不是工作,因爲「驗證不是def獨立非執行董事」。也許我理解的流星體系結構不正確,所以也許你可以告訴我如何解決這個簡單的步驟,我想做什麼?

回答

5

流星自動將文件封裝在IIFE中,所以要在文件之間共享變量/函數,需要在全局範圍內聲明它。試試這個:

Validation = function (post) { 
    this.validate = function() { 
     console.log(post) 
     return true; 
    }; 
}; 

的一種方式,使這個更明確的是包裝你的文件在自己的IIFE,傳遞一個全球參考。例如:

(function(global) { 
    function Validation (post) {} 

    Validation.prototype.validate = function() { 
     console.log(post) 
     return true; 
    }; 

    global.Validation = Validation; 
})(this); 

另一個類似的模式,做同樣的事情將是:

this.Validation = (function() { 
    function Validation (post) {} 

    Validation.prototype.validate = function() { 
     console.log(post) 
     return true; 
    }; 

    return Validation; 
})(); 
+0

簡單易懂。感謝您的快速回答。我會在將來注意到它。非常感謝:) – TJR

+0

是否有可能,如果我想要做,Template.temp_name.helpers({0}} {幫助:驗證('parameter'); }); – Gurjit