Meteor autoform - 计算隐藏字段的值
Meteor autoform - compute value for hidden field
在 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'
的值是 "one change behind" 'optionID'
的值,这意味着函数计算 'score'
是正确的,但保存到 mongo 似乎发生在 'score'
值更新之前,因此在 mongo 中,'score'
具有 [=13] 之前的值=] 最后更改。
比如我让'score'
不隐藏,这样我就可以修改了,直接在网页中修改,它的值就会在mongo中正确反映出来。但是在网页中修改 'optionID'
会产生 "one change behind" 行为。
有没有办法让 meteor autoform 字段依赖于同一表单中的另一个字段,而不需要它 "lag behind" 总是一次更改自动保存?
与其使用模板助手来计算隐藏 score
字段的值,不如考虑使用 autoform hook。因此,不是使用 selectedOptionScore
模板助手,而是定义一个钩子,如:
AutoForm.addHooks(['your-form-id'], {
before: {
method-update(doc) {
doc.score = someFunction(doc.optionID);
return doc;
}
}
});
通过这种方式,在您的表格被保存之前,计算出的分数已设置,并与其他所有内容一起保存。
在 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'
的值是 "one change behind" 'optionID'
的值,这意味着函数计算 'score'
是正确的,但保存到 mongo 似乎发生在 'score'
值更新之前,因此在 mongo 中,'score'
具有 [=13] 之前的值=] 最后更改。
比如我让'score'
不隐藏,这样我就可以修改了,直接在网页中修改,它的值就会在mongo中正确反映出来。但是在网页中修改 'optionID'
会产生 "one change behind" 行为。
有没有办法让 meteor autoform 字段依赖于同一表单中的另一个字段,而不需要它 "lag behind" 总是一次更改自动保存?
与其使用模板助手来计算隐藏 score
字段的值,不如考虑使用 autoform hook。因此,不是使用 selectedOptionScore
模板助手,而是定义一个钩子,如:
AutoForm.addHooks(['your-form-id'], {
before: {
method-update(doc) {
doc.score = someFunction(doc.optionID);
return doc;
}
}
});
通过这种方式,在您的表格被保存之前,计算出的分数已设置,并与其他所有内容一起保存。