我开始构建一个应用程序,并拥有一个用于创建宠物贴的集合。
注意:我正在使用以下软件包来构建我的收集模式,即简单模式https://atmospherejs.com/aldeed/simple-schema
我用于将数据插入此特定集合的页面上有一个部分,该部分根据用户做出的选择为他们提供更多选项。
例如,专注于一个问题,有一些复选框,默认情况下未选中任何复选框,但如果用户选择了任何复选框,则将通过复选框或文本区域为他们提供更多选项供您选择。关键是他们将根据其选择还有其他选择。
我认为处理数据如何插入的最佳方法是通过该特定部分的模板帮助程序,所以这不是问题。
相反,我感到困惑的是在收集级别以及如何对该信息进行模式化,或者甚至需要这样做。
例如,假设您有一个涉及宠物的问题。
问题可能是:您有宠物吗?
复选框选项可以是:
小狗
猫
其他
默认情况下,所有这些复选框均未选中,但是如果用户选中了任何复选框,则将显示一个文本区域(同样,我意识到所有这些都发生在Template.events和Template.helpers级别)。
现在,我已经设定了方案,我真正的问题是如何存储类似的信息或对其进行架构以允许这些值。
假定所有获取此数据的功能都在Template.helpers级别上,因此这是一个简单的问题,关于在这种情况下如何存储数据。
我的想法是做这样的事情(使用simpleSchema包):
Pet = new SimpleSchema({
petInstructions: {
type: String,
optional: true,
allowedValues: ['Dogs', 'Cats', 'Other']
}
});
但是,我不确定这是否再次正确,让我再次重申,我确实希望复选框具有值“ Dogs”,“ Cats”,“ Other”以及在选中其中任何一个时的文本区域,以便最终-用户可以输入有关其宠物的更多信息。
我尚不清楚的是,我是否在考虑该数据的模式如何或应如何在MongoDB中存储这种信息。
我觉得TextArea输入也应该有一个属性,这是考虑它的好方法吗?
例如(在上面的示例上):
Pet = new SimpleSchema({
petInstructions: {
type: String,
optional: true,
allowedValues: ['Dogs', 'Cats', 'Other'],
textArea: ""
}
});
我应该只为该特定内容保留另一个属性/值吗?
这在某种程度上是一个细粒度的问题,理解这样的简单事情将有助于阐明我的其他问题。
谢谢。
最佳答案
这就是我的结构方式。这来自自动格式说明,其中涉及如何针对另一个字段验证字段以及如何有条件地要求一个值-https://github.com/aldeed/meteor-simple-schema#best-practice-code-examples
Pet = new SimpleSchema({
pet: {
type: Object,
optional: true
},
"pet.type": {
type: String,
optional: true,
allowedValues: ['Dogs', 'Cats', 'Other']
},
"pet.instructions": {
type: String,
optional: true,
custom: function(){
var petType = this.field('pet.type').value;
// if the user selects a pet type then instructions should be required
if (petType){
return "required";
};
}
}
});
在您的旧代码中:
Pet = new SimpleSchema({
petInstructions: {
type: String,
optional: true,
allowedValues: ['Dogs', 'Cats', 'Other'],
textArea: ""
}
});
您实际上是在说,对于
petInstructions
键,您只允许将值设置为Dogs,Cat或Other,但是您还希望其中一个键为带有其他数据的textArea,这没有太大意义。 SimpleSchema希望您为每个键定义一个特定的数据点。