Альпака JS неправильно переупорядочивает флажки массива - PullRequest
0 голосов
/ 22 января 2020

У меня есть форма Альпака JS, состоящая из массива элементов, каждый из которых состоит из текстового поля и флажка. По какой-то причине, когда я меняю порядок с помощью элементов управления dynamici c, он успешно перенумеровывает текстовое поле, но не меняет номер флажка. Это также приводит к дублированию имени, если нажата та же самая верхняя кнопка для динамического добавления новых полей. Конечный результат - неверные данные, передаваемые при отправке формы. Как я могу исправить это, чтобы правильно перенумеровать флажки?

Вот пример конфигурации Alpaca:

$("#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
                        }
                    }
                }
            }
        }
    }
});

1 Ответ

0 голосов
/ 27 января 2020

Я не смог найти способ исправить само поведение, но мне удалось обойти его, добавив событие postRender в определение Alpaca следующим образом:

"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")) }); });
}

Это немного хак, но это работает, потому что родительскому объекту действительно присваивается правильное значение имени, и форма будет публиковать с этими значениями, если имя просто копируется во входные элементы.

...