在meteor autoform中(使用经典的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'
的值,意味着函数computing 'score'
是正确的,但是在更新'score'
值之前似乎已经发生了对mongo的保存,因此在mongo中,'score'
具有在'optionID'
上次更改之前的正确价值。
例如,如果我没有隐藏'score'
以便我可以修改它,直接在网页中修改它将使其值在mongo中正确反映。但是,修改网页中的'optionID'
会导致"背后的一个变化"行为。
有没有办法让meteor autoform字段依赖于同一形式的另一个字段,而不会让它"落后"通过一次改变自动保存?
答案 0 :(得分:1)
您可能希望使用autoform hook,而不是使用模板助手来计算隐藏的score
字段的值。因此,您可以定义一个类似于:
selectedOptionScore
模板帮助器
AutoForm.addHooks(['your-form-id'], {
before: {
method-update(doc) {
doc.score = someFunction(doc.optionID);
return doc;
}
}
});
这样就可以在保存表单之前设置计算得分,并保存其他所有内容。