我目前正在构建一个web工具,它允许用户以字符串的形式生成一个选项包。要选择他想要的选项,他需要使用一个具有不同输入(单选,复选框)的表单,该表单由当前保存所有可用选项及其代码的dictionary.json生成,格式如下(可能会更改):

[

    {
        "id": 0001,
        "title":"foo",
        "type":"radio",
        "options":[
            {
                "bar":"",
                "foo":"489",
                "foobar":"489+490"
            }
        ]
    },
    {
        "id": 0002,
        "title":"something",
        "type":"check",
        "options":[
            {
                "everything":"M016",
                "evenmore":"M139"
            }
        ]
    },

    [...]

如您所见,它基本上是一个小型数据库。问题是这些选项相互依赖,因此如果foofoobar则可能确定something绝对是evenmore且不能更改为everything。如何在dictionary.json中映射这些依赖项,以便生成的表单能够可靠地灰显由其他选项确定的选项?
该结构必须是灵活的,因此可以插入新的依赖关系,并将可靠地生成新的形式或验证现有的输出对它们。也可能存在依赖于多个其他选项的选项。我想不出一个聪明的方法来保存这些依赖项,我想知道json是否是这里使用的正确格式。
任何提示或想法都是受欢迎的。谢谢!

最佳答案

您可以尝试将每个选项保存为一个对象,该对象存储如果选中该选项将被排除的所有选项。
因此您的json可以如下所示:

[
    {
        "id": 0001,
        "title":"foo",
        "type":"radio",
        "options":[
            {
                "bar":"",
                "excludes": []
            },
            {
                "foo":"489",
                "excludes": []
            },
            {
                "foobar":"489+490",
                "excludes": [
                    {
                        "id": 0002,
                        "options": [
                            "everything"
                        ],
                    },
                    {
                        "id": 0003,
                        "options": [
                            "apple",
                            "cherry"
                        ],
                    },
                ]
            }
        ]
    },
    {
        "id": 0002,
        "title":"something",
        "type":"check",
        "options":[
            {
                "everything":"M016",
                "excludes": []
            },
            {
                "evenmore":"M139",
                "excludes": []
            }
        ]
    },

    [...]

每次选择一个选项时,您都必须检查它们的排除列表,并禁用特定字段的所有这些选项。
要提高可用性,您可以检查一个字段只剩下一个选项,选择此选项,然后禁用整个字段。
编辑:
此外,您还可以将isExcludedBy字段保存到每个选项。
everythingid 0002选项将如下所示:
"isExcludedBy": [
    "id": 0001,
    "options": [
        "foobar"
    ]
]

这可能有点多余,但取决于您希望ui显示的内容,它可以为您节省一些计算时间。

关于javascript - JSON结构中的 map 依赖项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55745050/

10-08 22:11
查看更多