【问题标题】:meteorjs global function for client客户端的meteorjs全局函数
【发布时间】:2014-03-19 14:18:59
【问题描述】:

我尝试为我的流星应用程序定义一个验证函数。我必须在客户端验证后期数据,但也在服务器端验证以防止操纵。

因此,我在目录 myApp/lib/validation/

中定义了函数

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

myApp/lib/validation/中的验证函数:

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

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

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

myApp/lib/methodes/ 中的方法:

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

  }
});

不起作用,因为“未定义验证”。也许我对meteorjs的架构理解不正确,所以也许你能告诉我如何解决我想做的这个简单的步骤?

【问题讨论】:

    标签: javascript meteor


    【解决方案1】:

    Meteor 自动将文件包装在 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;
    })();
    

    【讨论】:

    • 简单易懂。感谢您的快速答复。我以后会注意的。非常感谢:)
    • 如果我想做的话可以吗,Template.temp_name.helpers({ helper : Validation('parameter'); });
    猜你喜欢
    • 1970-01-01
    • 2018-07-12
    • 1970-01-01
    • 2017-10-13
    • 2019-04-06
    • 2013-02-13
    • 2019-06-16
    • 2014-08-22
    • 2014-06-18
    相关资源
    最近更新 更多