【发布时间】: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