【问题标题】:Meteor autoform - compute value for hidden fieldMeteor autoform - 计算隐藏字段的值
【发布时间】:2016-12-14 18:33:26
【问题描述】:

在流星自动生成器中(使用经典的 aldeed 包:https://github.com/aldeed/meteor-autoform),我有一个名为 'score' 的隐藏字段,其值是另一个名为 'optionID' 的字段的函数。

{{#autoForm
  class                = "autoform"
  id                   = dataID
  collection           = (getCollection 'DataColl')
  doc                  = dataDoc
  type                 = "method-update"
  meteormethod         = "DataColl.autoformUpsert"
  singleMethodArgument = true
  autosave             = true
}}

  {{> afQuickField
    name         = 'optionID'
    type         = "select-radio"
    template     = "buttonGroup"
    options      = scoreOptions
  }}

  {{> afQuickField
    name         = 'score'
    type         = "hidden"
    value        = selectedOptionScore
  }}

{{/autoform}}

函数selectedOptionScore取决于'optionID'的选定值(使用Autoform.getFieldValue

Template.formTemplate.helpers({
  selectedOptionScore(): String {
    const optionID = AutoForm.getFieldValue('optionID');
    const optionScore = someFunction(optionID);
    return optionScore;
  },
});

问题是在表单的每次自动保存时,'score' 的值是'optionID' 的值的“一个变化”,这意味着计算'score' 的函数是正确的,但保存到 mongo 似乎在 'score' 值更新之前发生了,所以在 mongo 中,'score' 的值与上次更改 'optionID' 之前的值相同。

例如,如果我将'score'设置为不隐藏以便我可以修改它,那么直接在网页中修改它会使其值正确反映在mongo中。但是在网页中修改'optionID' 会产生“后面的变化”行为。

有没有办法让流星自动表单字段依赖于相同表单中的另一个字段,而不会总是“落后”自动保存一次更改?

【问题讨论】:

    标签: javascript meteor meteor-autoform


    【解决方案1】:

    您可能希望研究使用autoform hook,而不是使用模板帮助器来计算隐藏的score 字段的值。因此,不要使用 selectedOptionScore 模板助手,而是定义如下钩子:

    AutoForm.addHooks(['your-form-id'], {
      before: {
        method-update(doc) {
          doc.score = someFunction(doc.optionID);
          return doc;
        }
      }
    });
    

    这样,在您的表单被保存之前,计算的分数被设置,并与其他所有内容一起保存。

    【讨论】:

    • 完美。实际上,这正是我为解决它所做的。作为任何看到这一点的人的提醒,我认为如果我的架构足够具体,自动值也会很好。
    猜你喜欢
    • 2014-03-22
    • 2016-01-31
    • 2016-04-29
    • 1970-01-01
    • 2013-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多