meteorjs客户端的全局功能

TJR*_*TJR 2 javascript meteor

我尝试为我的meteor应用程序定义验证功能.我必须在客户端验证后期数据,但也要在服务器端验证,以防止操作.

因为这个我定义了dir myApp/lib/validation /中的函数

我在表单上添加了一个提交事件,并调用了meteorjs方法.在这个方法中,我调用我的验证函数.

myApp/lib/validation /中的验证功能:

function Validation (post) {
    this.validate = function () {
        console.log(post)
        return true;
    };
};
Run Code Online (Sandbox Code Playgroud)

在myApp/client/manager /中提交事件:

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

myApp/lib/methodes /中的Methode:

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

  }
});
Run Code Online (Sandbox Code Playgroud)

这并没有工作,因为"验证没有定义".也许我不是以正确的方式理解meteorjs的架构所以也许你可以告诉我如何解决我想做的这个简单步骤?

sbk*_*ing 5

Meteor自动包装IIFE中的文件,因此要在文件之间共享变量/函数,需要在全局范围内声明.试试这个:

Validation = function (post) {
    this.validate = function () {
        console.log(post)
        return true;
    };
};
Run Code Online (Sandbox Code Playgroud)

使其更明确的一种方法是将文件包装在您自己的IIFE中,传入全局引用.例如:

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

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

    global.Validation = Validation;
})(this);
Run Code Online (Sandbox Code Playgroud)

另一个做同样事情的类似模式是:

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

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

    return Validation;
})();
Run Code Online (Sandbox Code Playgroud)