在Meteor中改变钩子中的反应变量值

时间:2015-07-16 10:47:25

标签: javascript node.js meteor meteor-autoform

我有

Template.templateName.onCreated(function() {
  this.variableName = new ReactiveVar;
  this.variableName.set(true);
});

并在templateName我有一个autoform。我需要在提交variableName时将反应变量false设置为autoform

我试过了

AutoForm.hooks({
  myForm: {
    onSuccess: function(operation, result) {
      this.variableName.set(false);
    },
  }
});

但它不起作用,因为this.没有引用模板templateName,因为它在辅助工具和事件中引用。如果我使用会话,它会起作用,因为它们不限于特定模板。

如何更改autoform hook中的反应变量?

我也试过

AutoForm.hooks({
  myForm: {
    onSuccess: function(operation, result) {
      this.template.variableName.set(false);
      this.template.parent.variableName.set(false);
      this.template.parent().variableName.set(false);
      this.template.parentData.variableName.set(false);
      this.template.parentData().variableName.set(false);
      this.template.parentView.variableName.set(false);
      this.template.parentView().variableName.set(false);
    },
  }
});

使用console.log(this.template)时,它会打印一个对象。如果我使用console.log(this.template.data),我会

Object {id: "myForm", collection: "Meteor.users", type: "update", doc: Object, validation: "submitThenKeyup"…}

我使用反应变量variableName来确定是显示可编辑的表单还是显示用户的数据。也许有另一种更好的方法来做到这一点。

1 个答案:

答案 0 :(得分:1)

编辑onCreated:

Template.templateName.onCreated(function() {
  this.variableName = new ReactiveVar(false);
});

您可能需要添加辅助函数来获取Template实例:

Template.templateName.helpers({
    getVariableName: function() {
      return Template.instance().variableName.get();
    }
});

然后您可以在表单逻辑中调用

AutoForm.hooks({
  myForm: {
    onSuccess: function(operation, result) {
      Template.getVariableName.set(false);
    },
  }
});

MeteorChef有一篇关于反应变量/词典Reactive Variables的精彩文章。