带枚举字段的条件逻辑

Conditional logic with Enumeration field

我正在使用 strapi 为客户创建一个 CMS,我想让他们控制问卷中的问题。在调查问卷中,每个问题都会在一个部分下:

-section 1
---question
---question
-section 2
---question
---question

所以在 strapi 中我创建了一个包含两个字段的集合类型:Section(类型枚举)和 Question(类型文本)。

我的问题是 strapi 不允许我在我的枚举中有空格,所以当我想在网站上将其显示为“业务信息”时,我不得不将我的部分设为“business_info” .我写了一个简单的映射函数(vue js中的方法)来让它工作:

sectionMapping(section) {
 switch(section) {
     case 'business_info': 
         return 'Business Information';
     case 'target_market':
         return 'Target Market';
     default: 
         return 'Section'
}

有了这个,每次我的客户想要在问卷中添加一个部分时,我都必须进行代码更新,这并不理想。我想出的一个解决方案是将部分从枚举更改为文本数据类型,但如果我的客户输入错误,它会创建一个完整的其他部分。这就是为什么我喜欢枚举的想法。

有什么建议吗?

谢谢

可能最动态的方法是将下划线替换为 spaces 并将每个单词的第一个字母大写。

首先您想使用 split 函数将字符串拆分为一个数组。

接下来您想使用 map, and uppercase the first letter of each word. The example below is take from this question:

遍历结果数组
section.charAt(0).toUpperCase() + s.slice(1);

最后join将字符串数组组合在一起,用一个space作为分隔符。当你把所有东西放在一起时,你应该得到一个看起来像这样的函数:

sectionMapping(section) {
    return section.split("_")
        .map(s => s.charAt(0).toUpperCase() + section.slice(1))
        .join(" ");
}

您必须将处理默认大小写的方式更改为 return "Section",但是此函数应该消除了每次您要添加新节标题时都需要折射此函数的需要。

我知道我有点晚了,但也许它对某人有帮助。

Strapi(不确定来自哪个版本)允许您通过代码手动将枚举更改为“不可接受”的形式。所以你写“business_info”,然后,在代码中,你可以把它变成“商业信息”。这样就不会出问题了。

组件和模型都可以这样做。找到它的简单方法是搜索“枚举”。 enter image description here

enter image description here