Meter.call() 传递变量

Meter.call() pass variables

我正在尝试使用 Meteor.call() 并传入两个变量来完成该方法

Template.RegisterForm.events({
  'submit form': function(event) {
    event.preventDefault();
    var emailVar = event.target.registerEmail.value;
    var passwordVar = event.target.registerPassword.value;
    Meteor.call('registerUser', emailVar, passwordVar )
  }
});

但是当我调用该方法时,emailVar 和 passwordVar 没有通过。

registerUser: function (email, password) {
  var id = Accounts.createUser({
    email: email,
    password: password
  });
}

他们出现未定义??

你调用 Meteor 方法没问题,

var emailVar = event.target.registerEmail.value;
var passwordVar = event.target.registerPassword.value;

可能是您有问题的代码。 event.target 指的是启动事件的 DOM 元素,在本例中是表单。反过来,registerEmailregisterPassword未定义

https://jsfiddle.net/fqp3a1mq/ 了解如何使用 jQuery 获取表单数据。

根据您的具体问题,一个干净的解决方案是:

Template.form.events({
  'submit form'(event) {
    const $form = $(event.target);
    const formData = $form.serializeArray();
    const params = {};

    event.preventDefault();

    // loop over our form data and create a params object for our method
    formData.forEach(data => {
      params[data.name] = data.value;
    });

    Meteor.call('methodName', params);    
  },
});

Meteor.methods({
  methodName(params) {
    ...
  },
});

使用这种方法,如果您有一个名为 registerEmail 的输入,那么它将在您的 Meteor 方法中作为 params.registerEmail 存在。

希望对您有所帮助。