在模板事件中使用反应方法

时间:2016-07-10 16:48:02

标签: forms asynchronous meteor

我一直在使用反应式方法来帮助从某些异步流星方法返回我的数据。这似乎不适用于表单,我想知道它周围的工作是什么?我收到了:

  
    

不要在Tracker计算之外使用ReactiveMethod.call。

  

包含以下文件: submit.js

Template.makeTransaction.events({
  'submit form': function(event){
    event.preventDefault();
    // construct the contact object that will be passed to the method
    var add = event.target.receiver.value;
    var amount = Number(event.target.amount.value);
    var comm = event.target.comment.value
    var request = {
      address: add,
      qty: amount,
      comment: comm,
      asset:'pounds'
    };
    return ReactiveMethod.call('sendAsset', request, function(err, result){ 
    });
  }
});

meteormethods.js

Meteor.methods({
  sendAsset: function(request){
    var sync=Meteor.wrapAsync(user.sendAssetToAddress, user);
    var data = sync({request});
    return data;
  },

谢谢!

1 个答案:

答案 0 :(得分:0)

事件处理程序(您的'submit form': function(event) {...})不是被动的。模板助手是,但他们不是一回事。

你正在做的事情有点奇怪,因为当事件触发时,事件处理程序只运行一次。所以在那个处理程序中,你应该使用接收Meteor.call结果的“普通”异步方法:

Meteor.call( 'sendAsset', request, function(err, result) { 
    if( err ) { /* Handle error */ return; }
    // Here you use the result.
});

正如您现在所做的那样,从事件处理程序返回值有点无意义。没有任何东西可以接受这个价值。