Select 类别未更新子类别
Select category not updating sub category
这是假设查看用户类别 selection 然后更新子类别。该解决方案是由其他人推荐的,但我似乎无法让它发挥作用。当我 select 类别时,子类别不会更新。谁能让我知道我错过了什么。
路径:category.js
<template name="category">
{{#autoForm collection="Meteor.users" id="categoryForm" doc=currentUser type="update"}}
{{> afQuickField name='profile.categories'}}
{{/autoForm}}
</template>
路径:Schema.js
var fruitArr = ['apple', 'banana'];
var vegetablesArr = ['carrot', 'broccoli'];
Schema.Category = new SimpleSchema({
category: {
type: String,
label: "Category",
allowedValues: ['fruit', 'vegetables']
},
subcategory: {
type: String,
label: "Subcategory",
allowedValues: _.union(fruitArr, vegetablesArr),
autoform: {
options: function () {
let category = AutoForm.getFieldValue("category");
if (!category) return [{label: "Please select a category first", value: ""}];
if (category === "fruit") return _.map(fruitArr, (v, i) => ({
label: "Fruit " + (i + 1) + ": " + v,
value: v
}));
else return _.map(vegetablesArr, (v, i) => ({label: "Vegetables " + (i + 1) + ": " + v, value: v}));
}
}
}
});
Schema.UserProfile = new SimpleSchema({
categories: {
type: Schema.Category,
optional: true,
}
});
在浏览器的控制台日志中调用AutoForm.getFormValues('categoryForm');
时,会返回如下结果:
{
"insertDoc":{
"profile":{
"categories":{
"category":"fruit"
}
}
},
"updateDoc":{
"$set":{
"profile.categories.category":"fruit"
},
"$unset":{
"profile.categories.subcategory":""
}
}
}
正如您从上面看到的,架构字段 subcategory
被引用为 profile.categories.subcategory
。因此,字段 subcategory
不会更新,因为 AutoForm.getFieldValue("category");
returns undefined
.
您可以通过更改
来修复此错误
let category = AutoForm.getFieldValue("category");
到
let category = AutoForm.getFieldValue("profile.categories.category");
在 subcategory
架构字段中的 options
函数中。
这是假设查看用户类别 selection 然后更新子类别。该解决方案是由其他人推荐的,但我似乎无法让它发挥作用。当我 select 类别时,子类别不会更新。谁能让我知道我错过了什么。
路径:category.js
<template name="category">
{{#autoForm collection="Meteor.users" id="categoryForm" doc=currentUser type="update"}}
{{> afQuickField name='profile.categories'}}
{{/autoForm}}
</template>
路径:Schema.js
var fruitArr = ['apple', 'banana'];
var vegetablesArr = ['carrot', 'broccoli'];
Schema.Category = new SimpleSchema({
category: {
type: String,
label: "Category",
allowedValues: ['fruit', 'vegetables']
},
subcategory: {
type: String,
label: "Subcategory",
allowedValues: _.union(fruitArr, vegetablesArr),
autoform: {
options: function () {
let category = AutoForm.getFieldValue("category");
if (!category) return [{label: "Please select a category first", value: ""}];
if (category === "fruit") return _.map(fruitArr, (v, i) => ({
label: "Fruit " + (i + 1) + ": " + v,
value: v
}));
else return _.map(vegetablesArr, (v, i) => ({label: "Vegetables " + (i + 1) + ": " + v, value: v}));
}
}
}
});
Schema.UserProfile = new SimpleSchema({
categories: {
type: Schema.Category,
optional: true,
}
});
在浏览器的控制台日志中调用AutoForm.getFormValues('categoryForm');
时,会返回如下结果:
{
"insertDoc":{
"profile":{
"categories":{
"category":"fruit"
}
}
},
"updateDoc":{
"$set":{
"profile.categories.category":"fruit"
},
"$unset":{
"profile.categories.subcategory":""
}
}
}
正如您从上面看到的,架构字段 subcategory
被引用为 profile.categories.subcategory
。因此,字段 subcategory
不会更新,因为 AutoForm.getFieldValue("category");
returns undefined
.
您可以通过更改
来修复此错误let category = AutoForm.getFieldValue("category");
到
let category = AutoForm.getFieldValue("profile.categories.category");
在 subcategory
架构字段中的 options
函数中。