Alpaca JS 没有正确地重新排序数组复选框

Alpaca JS is not properly reordering array checkboxes

我有一个 Alpaca JS 表单,其中包含一个项目数组,每个项目都包含一个文本框和一个复选框。出于某种原因,当我使用动态控件更改顺序时,它成功地重新编号了文本框,但没有更改复选框的编号。如果按下用于动态添加新字段的相同顶部按钮,这也会导致分配重复的名称。最终结果是提交表单时传递的数据不正确。我怎样才能解决这个问题以正确地重新编号复选框?

这是羊驼毛配置的示例:

$("#form1").alpaca({
    "schema": {
        "title": "Testing checkbox array IDs",
        "description": "Testbox checkbox array test.",
        "type": "object",
        "properties": {
            "form-fields": {
                "title": "Fields",
                "description": "These are the fields.",
                "type": "array",
                "items": {
                    "type": "object",
                    "properties": {
                        "field-name": {
                            "type": "string",
                            "title": "Field Name",
                            "description": "Enter the name for this field.",
                            "required": true
                        },
                        "field-box": {
                            "type": "boolean",
                            "title": "Field Box",
                            "description": "Check this box.",
                            "default": false
                        }
                    }
                }
            }
        }
    }
});

我找不到纠正行为本身的方法,但我能够通过向羊驼定义添加 postRender 事件来解决它,如下所示:

"postRender": function(control) {
    control.childrenByPropertyId["form-fields"].on("move", function() { $('input[type=checkbox]').each(function(index) { $(this).attr("name", $(this).closest("div:has(*[name])").first().attr("name")) }); });
    control.childrenByPropertyId["form-fields"].on("add", function() { $('input[type=checkbox]').each(function(index) { $(this).attr("name", $(this).closest("div:has(*[name])").first().attr("name")) }); });
    control.childrenByPropertyId["form-fields"].on("remove", function() { $('input[type=checkbox]').each(function(index) { $(this).attr("name", $(this).closest("div:has(*[name])").first().attr("name")) }); });
}

这有点 hack,但它确实有效,因为父对象确实被分配了正确的名称值,如果名称只是被复制到输入元素中,表单将 post 使用这些值。